Muk*_*mar 9 javascript ecmascript-6
我知道let和var之间的区别.let是块范围,var是功能范围.
for(var i=0; i< 3; i++){
setTimeout(function(){
console.log(i);
}, 10);
}
output : 3
3
3
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码片段是如何工作的(console.log(i)当i的值为3时,正在执行,因为i的范围是全局的).
但
for(let i=0; i< 3; i++){
setTimeout(function(){
console.log(i);
}, 10);
}
output : 1
2
3
Run Code Online (Sandbox Code Playgroud)
上面的代码片让我很困惑.根据我的说法它应该抛出引用错误(因为console.log(i)执行时的时间,将在全局范围内查看i的值而不是在本地范围内,并且我不在全局范围内声明/定义.因此它应该给出引用错误.)
谁能解释第二个循环如何在Runtime上工作?
当您let在此上下文中使用时,每次迭代都会创建一个新的绑定/范围。如果你想在 ES5 中使用 实现类似的行为var,你必须使用 IIFE:
for (var i = 0; i < 3; i++) {
(function (i) {
setTimeout(function () {
console.log(i);
}, 10);
})(i);
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |