以下代码:
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
打印结果为 6, 6, 6, 6, 6
解析:
上列代码的优先处理顺序是先执行 for 循环中的 i = 0; i<6; i++ ,在 i 为 1, 2, 3, 4, 5 的时候执行 i++ 操作,在当 i=6 时, for 循环停止,此时 i 的值为 6 , 再接着执行 console.log(i) 的操作打印出 6 一次,打印 6 的操作也开始按照 for 循环执行,一共打印到第六次结束。
let i = 0
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
将第一条代码 for 循环中的 i = 0; i<6; i++ 改为 let i = 0; i<6; i++ 即可打印出 0, 1, 2, 3, 4, 5 。
原因:
当 for 循环执行一遍之后打印出的数字会被 let 保存下来,for 循环一共会执行六次,每次打印的数字便会被保存,所以打印出的结果为 0, 1, 2, 3, 4, 5 。