这可以吗?
for (var i = 0; i < 10; i++) {
...
}
doSomething(i);
显然,我希望i
的值为10。我的测试表明它没问题,但是这个定义的行为是什么? (ES5)
答案 0 :(得分:7)
是的,这是定义的行为。当前版本的JavaScript没有块作用域,只有函数作用域。
但是,JavaScript的新标准(ES6)引入了let
语句(var
的替代),它将遵循块范围。
在以下代码中,您将无法在循环外访问i
:
for (let i = 0; i < 10; i++) {
...
}
答案 1 :(得分:0)
这实际上是一个范围问题。你想让我在for循环之外访问吗?
如果是这样,并且您想确保在循环外定义i。像:
Duh ...... for
循环中的变量未被阻止(除非ES6中的let
选项)。我已经知道了,但我很累并且间隔它。因此当然可以访问i
,并且在for
循环之外定义它是完全没必要的。
我要把它留下来作为提醒自己,当我累了并且没有完全考虑我的答案时不要跳枪。
var i;
for(i = 0;i < 10; i++) {
...
}
doSomething(i);
编辑:经过仔细检查后,无论如何我肯定都可以访问,这是定义的行为,所以无论哪种方式都是安全的。