也许我不知道for循环索引变量是如何得到作用域的,但是当我的一个循环没有完成时我感到非常惊讶,似乎因为在循环内调用的函数也包含了一个ifor for循环索引.
这是我用一个小脚本来演示这种行为:
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');
Run Code Online (Sandbox Code Playgroud)
如果我在Chrome中运行它并查看控制台日志,我应该看到*****五次.但是,我只看过一次.经过进一步检查,如果我输入iChrome javascript控制台,它将输出6(= 'hello'.length + 1).这使我认为它i已成为全球范围的一部分,并不仅限于for需要它的循环范围.
它是否正确?如果是这样,for在javascript中定义循环的索引变量有什么更好的做法?
dec*_*eze 12
在Javascript中,变量的作用域是var关键字.声明变量时var,变量的范围限定为当前函数.在不使用var关键字的情况下分配给变量时,假设您正在讨论相同或更高范围内已定义的变量.如果未找到,则在最高范围内创建变量.
底线:使用声明所有变量var.
您应该始终使用以下内容声明变量var:
for(var i = 0; i < test.length; i++) ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5323 次 |
| 最近记录: |