JS 函数的执行时机

91 阅读1分钟

解释为什么如下代码会打印 6 个 6

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

setTimeout是等一会再执行的意思,这里循环先执行完,执行完这个循环之后i=6,i=6之后再去打印出6次i,所以得到6个6

写出让上面代码打印 0、1、2、3、4、5 的方法

for(let i=0;i<6;i++){
  setTimeout(()=>{
  console.log(i)
  },0)
}

每次进入循环的时候,把i复制一份,不跟随新的i变化,所以六次循环就生成了6个新的i,再加上本身i=0,最大打印到i<5,所以是0、1、2、3、4、5

除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5

用立即执行函数

for(i=0;i<6;i++){
   !function(i){
       setTimeout(()=>{console.log(i)},0)
   }(i)
}