《JS 函数的执行时机》

171 阅读1分钟

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

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

原理是:setTimeout会等到当前代码的for循环执行完了,再去执行console.log(i) 而for循环执行完之后,i已经是6了 所以会打印出6个6

打印 0 -5


for(let i = 0; i<6; i++){
    setTimeout(()=>{
        console.log(i)
    },0)
}
1使用立即执行函数
for(i = 0;i<6;i++){
!function(j){
setTimeout(() => {console.log(j)},0)
}(i)
}




2利用 setTimeout 的第三个参数,将i传进去

let i
for(i = 0; i<6; i++){
    setTimeout((value)=>{
      console.log(value)
    },0,i)
}
3利用 const 关键字

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