for (var i = 0; i< 10; i++){
setTimeout(() => {
console.log(i);
}, 1000)
}
// 10
原因:作用域,for循環中頭部使用var 定義變量i 時,它和循環體中的i 的作用域不是同級作用域,因此當for循環執行完畢後,並不會給每個循環都儲存相對應的i的值。
- 塊級作用域let
for (let i = 0; i< 10; i++){
setTimeout(() => {
console.log(i);
}, 1000)
}
- IIFE
for (var i = 0; i< 10; i++){
setTimeout((() => {
console.log(i);
})(), 1000)
}
- 傳參
語法:setTimeout(function, milliseconds, param1, param2, …)
for (var i = 0; i< 10; i++){
setTimeout((i) => {
console.log(i);
}, 1000, i)
}
for (var i = 0; i< 10; i++){
setTimeout(function(i) {
console.log(i);
}.bind(null, i), 1000)
}