为什么如下代码会打印 6 个 6?
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
因为JS是单线程运行的。
setTimeout语句在循环结束时才会执行,循环结束时i已经变成了6,所以会打印出6个6
让上面代码打印 0、1、2、3、4、5 的方法:
- 使用 for let 配合
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 利用函数作用域
let i = 0
for(i = 0; i < 6; i++ ){
(function (j) {
setTimeout(function () {
console.log(j);
}, 0);
})(i);
}