6 回答

TA貢獻2016條經驗 獲得超9個贊
就是一直說的閉包
i之所以沒事是因為用了let相當于
let timeCount = 0;
for (let i = 0; i < 5; i++) {
{
let j = i;//實際上并沒有 只是為了說明i在作用域在{}里
setTimeout(() => {
console.log("i..", j);
console.log("timeCount..", timeCount);
}, 1000 * timeCount);
timeCount++;
}
}
而如果你把i放到全局作用域將會都是5
let timeCount = 0;
let i = 0;
for (; i < 5; i++) {
setTimeout(() => {
console.log("i..", i);
console.log("timeCount..", timeCount);
}, 1000 * timeCount);
timeCount ++;
}

TA貢獻1845條經驗 獲得超8個贊
let timeCount = 0;
for (let i = 0; i < 5; i++) {
setTimeout(() => {
**alert(2)**
console.log("i..", i);
console.log("timeCount..", timeCount);
}, 1000 * timeCount);
**alert(1)**
timeCount ++;
}
setTimeout即使時間設置為0,也是有延遲的啊,加粗的地方alert你就可以看到,會先執行setTimout的下邊,五次之后開始執行setTimeout,所以timeCount已經加到了5

TA貢獻1803條經驗 獲得超6個贊
很簡單啊。
因為for循環先執行,然后再去執行異步的setTimeout。
for執行完了timeCount就是5了,再去執行setTimeout內的打印不就是5個5了!
而i是因為在循環內用了塊級變量let
for (let i = 0; i < 5; i++) {
setTimeout(() => {
console.log("i..", i); // 1234
}, 100);
}
添加回答
舉報