JS 函数的执行时机

59 阅读1分钟

理解JS的执行时机在学习js函数时很重要。

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

这段代码先执行for循环这时候i=6,setTimeout的执行需要在for循环结束之后,由于共用一个i,那么执行的结果是输出6个6。

想要输出0,1,2,3,4,5需要将代码修改成如下代码

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

这时候执行for循环时,每执行一次循环,会生成一个全新的i,那么输出会是0,1,2,3,4,5。

let i = 0
for(i = 0; i<6; i++){
 !function(j){
   setTimeout(function(){
     console.log(j)
   },j*10)
 }(i)
}

另外还可以通过闭包,将i的变量驻留在内存中,当输出j时,引用的是外部函数的变量值i,i的值是根据循环来的,执行setTimeout时已经确定了里面的的输出了。