JS 函数的执行时机

233 阅读1分钟

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

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  • 这里主线程上面要执行的任务是:for循环。由于每执行一次for循环就要设一个定时,就好比是每次循环“定一个闹钟”。一共执行6次循环,那么就定了6个闹钟。
  • 在零延迟调用setTimeout时,所有的定时任务被放在了任务队列的队尾,只有主线程的任务全部完成,才会去任务队列执行这6个定时任务。
  • 又,主线程结束时i=6。故,最终会打印“6个6”。

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

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