首选局部变量为全局属性和索引值
在将搜索扩展到更大的范围之前,Javascript 引擎首先在本地范围内查找变量。如果变量是数组中的索引值,或者是关联数组中的属性,则它将在查找内容之前首先查找父数组。
在处理性能关键代码时,这会产生影响。以一个常见的 for
循环为例:
var global_variable = 0;
function foo(){
global_variable = 0;
for (var i=0; i<items.length; i++) {
global_variable += items[i];
}
}
对于 for
循环中的每次迭代,引擎将查找 items
,查找项目中的 length
属性,再次查找 items
,查找 items
的 index i
处的值,然后最终查找 global_variable
,首先在检查全局范围之前尝试本地范围。
对上述功能的高效重写是:
function foo(){
var local_variable = 0;
for (var i=0, li=items.length; i<li; i++) {
local_variable += items[i];
}
return local_variable;
}
对于重写的 for
循环中的每次迭代,引擎将查找 li
,查找 items
,查找索引 i
的值,并查找 local_variable
,这次只需要检查本地范围。