for(var i=0; i<5;i++) {
setTimeout(() => {
console.log(i)
})
}
輸出結果:
5
5
5
5
5
原因是 var 變量不存在塊級作用域,這5次循環中 setTimeout 使用的 i 其實都是一個 i,而setTimeout 異步執行會在 for 循環之后執行。所以將var變量換成let即可。
for(let i=0;i<5;i++) {
setTimeout(() => {
console.log(i)
})
}
輸出結果:
0
1
2
3
4
