<分区>
我知道 let 和 var 的区别。 let 是 block 作用域,var 是函数作用域。
for(var i=0; i< 3; i++){
setTimeout(function(){
console.log(i);
}, 10);
}
output : 3
3
3
我知道上面的代码片段是如何工作的(console.log(i)
在 i 的值为 3 时执行,因为 i 的范围是全局的)。
但是
for(let i=0; i< 3; i++){
setTimeout(function(){
console.log(i);
}, 10);
}
output : 1
2
3
上面的代码片段让我很困惑。根据我的说法,它应该抛出引用错误(因为 console.log(i)
执行时,将在全局范围内而不是在本地范围内查看 i 的值,并且 i 未在中声明/定义全局的。所以它应该给出引用错误。)
任何人都可以解释 2nd for 循环如何在运行时工作?