打印出6个6代码分析
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
代码打印6个6是主要是因为setTimeout的存在,setTimeout的作用是延迟后执行,所以就有了以上代码打印出6个6的情况。
JS引擎是单线程执行,先执行同步,再执行异步,所以即使setTimeout等待时间为零,依然要等待主程序执行完毕后,才会开始执行,但此时i的值已经是6了,所以就有了以上情况
打印出0,1,2,3,4,5代码如下
for(let i =0;i<6;i++)
setTimeout(()=>{
console.log(i)
},0)
for let循环更多的是为了照顾JS新人的想法给出的办法,上面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以输出结果为i<6前的所有值。
既然setTimeout是延迟执行,是不是可以推断出如果引用立即执行函数,也能够让该代码打印出0~5
let i = 0
for(i = 0; i<6; i++){
!function(i){
setTimeout(()=>{ console.log(i)
},0)
}(i)
}