为什么如下代码会打印 6 个 6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
setTimeout()的意思是,结束了当前任务后马上执行,在上文代码中的意思就是,在结束for循环后立刻执行。在遍历i时,setTimeout()其实执行了6次,但因为是“马上执行”,所以不会立刻打印出i,而是在程序i遍历结束后,才会执行console.log(i),遍历结束后,i已经变成了6,所以结果是6个6。
要是想打出0—5呢?
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
这里 let 会单独创建一个作用域 相当于有6个i,因为i等6时,6不小于6,所以for循环没有执行,最终打印出0, 1,2,3,4,5。