JS 函数的执行时机

208 阅读1分钟

1、解释以下代码为什么会打印出6个6

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  • setTimeout(,0)的意思是,尽快做,马上做。可以类比成我在打游戏,妈妈喊我去吃饭,那么我会说我马上就来,然后打完游戏再去吃饭。
  • 那么这个setTimeout(,0)也就意味着,要等到for循环执行完,在来执行这个函数。
  • 这个for循环最终结果是 i = 6,结束循环,然后开始执行setTimeout()的内容,执行6次,最后输出6个6

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

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

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

  • 闭包+立即执行函数
let i 
for(i = 0; i<6; i++){
  !function(j){
      setTimeout(()=>{
        console.log(j)
      },0)
  }(i)
}
  • 利用 setTimeout 的第三个参数,将i传进去
let i
for(i = 0; i<6; i++){
    setTimeout((value)=>{
      console.log(value)
    },0,i)
}
  • 利用 const 关键字
let i
for(i = 0; i<6; i++){
    const x = i
    setTimeout(()=>{
      console.log(x)
    })
}