Skip to content

JS函数的调用时机不同,结果也不同

setTimeout()方法会设置一个计时,该定时器在计时器终止后执行一个函数或指定的一段代码。

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

上列代码打印出来的结果是6个6,这是为什么呢?

首先代码声明了一个全局变量i的值为0,在执行for循环,而for循环内部的代码是setTimeout(),delay的计时器为0,表示的是**“马上”执行**,或者尽快执行。每次for循环的时候,也会执行一次setTimeout(),待for循环结束后,在执行setTimeout()内的箭头函数,但是此时i的值已经随for循环自增变成了6,所以打印出的是6个6。

通过下列代码就可以打印出 0、1、2、3、4、5。

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

这是因为JS在forlet一起用时,每次for循环会多创建一个i,而setTimeout里的箭头函数输出的就是这个新的i