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

Javascript 在循环后访问for循环计数器是否安全?,javascript,for-loop,scope,Javascript,For Loop,Scope,这样行吗 for (var i = 0; i < 10; i++) { ... } doSomething(i); 显然,我希望这里的值是10。我的测试表明这是正常的,但这是定义的行为吗?ES5是的,这是定义的行为。当前版本的JavaScript没有块作用域,只有函数作用域 然而,JavaScriptES6的新标准引入了一个let语句作为var的替代,它将尊重块范围 在以下代码中,您将无法访问循环外的i: for (let i = 0; i < 10; i++) {

这样行吗

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

显然,我希望这里的值是10。我的测试表明这是正常的,但这是定义的行为吗?ES5是的,这是定义的行为。当前版本的JavaScript没有块作用域,只有函数作用域

然而,JavaScriptES6的新标准引入了一个let语句作为var的替代,它将尊重块范围

在以下代码中,您将无法访问循环外的i:

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

是的,这是定义的行为。当前版本的JavaScript没有块作用域,只有函数作用域

然而,JavaScriptES6的新标准引入了一个let语句作为var的替代,它将尊重块范围

在以下代码中,您将无法访问循环外的i:

for (let i = 0; i < 10; i++) {
    ...
}
这确实是一个范围问题。是否希望我在for循环外部可访问

如果是这样,并且您希望确保在循环外定义i。比如:

嗯。。。除非ES6中的let选项,否则for循环中的变量不会被阻塞。我早就知道了,但我已经累了,我已经把它隔开了。所以我当然是可以访问的,在for循环之外定义它是完全没有必要的

我将把这件事留给自己,作为一个提醒,当我累了,还没有充分考虑我的答案时,不要仓促行事

var i;
for(i = 0;i < 10; i++) {
...
}
doSomething(i);
编辑:在反复检查之后,无论发生什么情况,我都肯定会被访问,这是定义的行为,所以无论哪种方式都是安全的。

这确实是一个范围问题。是否希望我在for循环外部可访问

如果是这样,并且您希望确保在循环外定义i。比如:

嗯。。。除非ES6中的let选项,否则for循环中的变量不会被阻塞。我早就知道了,但我已经累了,我已经把它隔开了。所以我当然是可以访问的,在for循环之外定义它是完全没有必要的

我将把这件事留给自己,作为一个提醒,当我累了,还没有充分考虑我的答案时,不要仓促行事

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

编辑:在反复检查之后,无论发生什么情况,我都肯定会被访问,这是定义的行为,所以无论哪种方式都是安全的。

这个答案不准确。这里发生的事情是,一个var被提升,它不会受到块作用域的影响。当然,你是对的。不管怎样,把它留着,编辑一下,提醒自己,当我太累了,还没有想清楚的时候,不要把答案扳得太快。这个答案不准确。这里发生的事情是,一个var被提升,它不会受到块作用域的影响。当然,你是对的。不管怎样,把它放在一边,编辑一下,提醒自己,当我太累了,还没有想清楚的时候,不要把答案扳得太快。