JS 函数的执行时机

74 阅读1分钟

揭秘:为什么下面代码会打印 6 个 6

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

上面代码中的setTimeout的调用时机是在for循环结束之后执行的,当for循环结束之后,这个时候的i已经变成了6,当setTimeout在走的时候,i已经变成了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)
    }

输出的结果为

除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5

  • 用传参的方式
    let i = 0;
    for (i = 0; i < 6; i++) {
        setTimeout((j) => {
            console.log(j)
        }, 0, i)
    }

输出结果为: