JS 函数的执行时机

59 阅读1分钟

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

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

setTimeout是异步任务,会在执行栈任务结束后在再执行,此时全局变量i的值已经变为6.

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

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

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

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