代码示例
要求输出: 0 1 2 3 4 5
实际如下
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
// 输出 6 6 6 6 6 6
setTimeout 会等 for 执行完在进行 六次输出
由于 let i 在外部,for 执行完后 只有一个 i 值 为 6
等到 setTimeout 执行 console.log(i) 时,就会输出 6 个 6
解决办法
let 放里面
for (let i = 0; i < 6; i++) {
setTimeout(() => {
console.log(i)
}, 0)
}
// 这样每次都是不一样的 i
其他方法如下:
let i
for (i = 0; i < 6; i++) {
!function (i) {
console.log(i)
}(i)
}
let i = 0
for(i = 0; i<6; i++){
let j = i; // 或者 const 反正每次都不一样
setTimeout(()=>{
console.log(j)
},0)
}
let i = 0
for(i = 0; i<6; i++){
setTimeout((i)=>{
console.log(i)
},0, i)
}