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)
}