Car*_*los -1 javascript ecmascript-6
我知道 let 的范围是最近的封闭块。但仍然不明白为什么下面给定的代码输出如此不同。
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i)
}, 1000)
}
Run Code Online (Sandbox Code Playgroud)
//0,1,2,3,4
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i)
}, 1000)
}
Run Code Online (Sandbox Code Playgroud)
//5,5,5,5,5
第二个输出如此,因为您timeout实际运行的时间i设置为最后一次迭代。为什么?因为如果你var在你for的变量中使用,则它被提升到循环范围之外,所以它实际上看起来像:
var i = 0;
for (i=0;i<5;i++){
//and when your timeout runs, i is 5
}
console.log(i); //5
Run Code Online (Sandbox Code Playgroud)
并且let不会在外面起吊:
for (let i=0;i<5;i++){
}
console.log(i); //undefined, not hoisted
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |