JS 函数的执行时机

174 阅读1分钟

先看一下这段代码

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

由于定时器的存在,所以此段程序的运行结果是打印出6个6,而不是0,1,2,3,4,5
而出现这种情况就是JS函数的执行时机造成的
由于定时器的作用是等待一段时间再执行定时器内的语句
而在等待的这段时间内,循环变量i已经变成了6,此时再一个接一个的执行打印操作。

如何让上面这段代码打出0,1,2,3,4,5

  1. 用以下代码即可实现
let i = 0
for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  1. 将定时器的调用和定义分开(因为每次调用定时器函数都必须把函数执行完才能进行下一次循环
function timer(i) {
    setTimeout(console.log(i),0);
}
for (var i=0; i<6;i++) {
    timer(i);
}