JS 函数的执行时机

93 阅读1分钟

1 为什么如下代码会打印 6 个 6

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

setTimeout函数会在for循环全部结束之后再执行,当i的值为6时才会停止循环,所以当i的值为6时,console.log(i)执行了6次,打印出6个6

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

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

let出的变量的作用域只能在当前函数中,所以每次for循环生成的都是一个新的i,setTimeout里输出的i就是这个新的i,这个i是不会变化的,所以可以打印出0-5

3 使用其他方法打印出 0、1、2、3、4、5

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