JS 函数的执行时机

71 阅读1分钟

JS函数在使用的时候是有调用时机的,调用时机不一样,得到的结果也会不一样。除了常规的调用时机还有一种比较特别的情况,就是有setTimeout的情况。例:

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

执行这段代码会发现结果是打印了6个6

image.png

首先,setTimeout的意思是尽快执行,而不是马上执行。上面的代码执行的过程是当js在执行for循环的时候,并不会马上去执行console.log(i),而是等for循环结束后,才尽快执行console.log(i),这时候i的值为6,所以最终会打印出6。而在这个过程中for循环执行了6次,setTimeout也执行了6次,所以最后看到的结果是打印了6个6。

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

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

将 let 放进 for 循环中,就可以打印出 0、1、2、3、4、5

image.png