循环后访问for循环计数器是否安全?

时间:2015-11-13 05:41:16

标签: javascript for-loop scope

这可以吗?

for (var i = 0; i < 10; i++) {
   ...
}
doSomething(i);

显然,我希望i的值为10。我的测试表明它没问题,但是这个定义的行为是什么? (ES5)

2 个答案:

答案 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);

编辑:经过仔细检查后,无论如何我肯定都可以访问,这是定义的行为,所以无论哪种方式都是安全的。