JS 函数的执行时机

80 阅读1分钟

看下面代码会如何打印

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

我们正常的想法时打印0,1,2,3,4,5,但是代码执行后打印的确是6个6.

这是因为setTimeout()方法

  • setTimeout()方法
    • setTimeout() 是属于 window 的方法,该方法用于在指定的毫秒数后调用函数或计算表达式 因为此方法会在指定的时间后调用函数,但是在调用函数之前for循环已经结束,i的值已经改变,所以才会打印出6个6.如果不用setTimeout()方法则可以正常调用.

例子:

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

这样使用则可以打印出0,1,2,3,4,5.

当然也有其他的方法可以打印出0,1,2,3,4,5.

例子:

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

这个跟第一个代码没什么区别,为什么就可以打印出0,1,2,3,4,5呢?

因为JS在for和let一起使用时会加东西,你每次循环的时候都会创建一个新的i值,然后进行调用.

或者使用关键字

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