JS 函数的执行时机

79 阅读1分钟

一、为什么如下代码会打印 6 个 6

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

解释: 因为for函数先循环完得到i=6,在打印6个6,就类似当你手头上有事情,你将这件事情做完再去打印i,而且只有一个i,每次打出的i都是最新值,所以呢事情就代表for循环,然后等你循环完了再去打印,0代表立刻马上,不需要等。

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

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

解释: 因为JS在for和let一起用的时候会加东西,每次循环会多创建一个i。

三、另一个可以打印出 0、1、2、3、4、5的方法

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