也许我不知道for
循环索引变量是如何得到作用域的,但是当我的一个循环没有完成时我感到非常惊讶,似乎因为在循环中调用的函数包含{{ 1}}也用于i
循环索引。
这是我用一个小脚本来证明这种行为:
for
如果我在Chrome中运行此操作并查看控制台日志,我应该看到var loopOne = function(test) {
for(i = 0; i < test.length; i++)
console.log(getMask(test));
};
var getMask = function(pass) {
var s = "";
for (i = 0; i < pass.length; i++) {
s = s + "*";
}
return s;
};
loopOne('hello');
五次。但是,我只看过一次。进一步检查后,如果我在Chrome javascript控制台中输入*****
,则会输出6(i
)。这使我认为= 'hello'.length + 1
已成为全局范围的一部分,并不仅限于需要它的i
循环的范围。
这是对的吗?如果是这样,在javascript中定义for
循环的索引变量有什么更好的做法?
答案 0 :(得分:12)
在Javascript中,变量的范围是var
关键字。使用var
声明变量时,变量的范围限定为当前函数。在不使用var
关键字的情况下分配给变量时,假设您正在讨论相同或更高范围内已定义的变量。如果未找到,则在最高范围内创建变量。
底线:使用var
声明所有变量。
答案 1 :(得分:8)
您应该始终使用var
声明变量:
for(var i = 0; i < test.length; i++) ...
答案 2 :(得分:4)
使用var
声明变量时,将它们限定为当前执行上下文。
如果不这样做,它们将成为全局对象的属性(浏览器中为window
)。