JS函数的执行时机

167 阅读1分钟
let i = 0;
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
//6,6,6,6,6,6

为什么会打印 6 个 6 ?

由于 JS 是单线程的,同一时间JS只能做一件事.都要排队等待执行

setTimeOut可以理解为先读取延迟时间,再把setTimeOut内的函数放在一个等待执行区,等呆会儿执行console.log(i), 等for 循环一遍之后,i 的值已经 i++到了6, 最后执行console.log(i),输出 6个6

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

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
//直接给 for 的 i 定义

或者

let i = 0;
for(i = 0; i<6; i++){
  setTimeout((i)=>{
    console.log(i)
  },0, i)
}
//给时间的后面再加个参数 i