JS 函数的执行时机

130 阅读1分钟

以下代码:

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

打印结果为 6, 6, 6, 6, 6

解析:

上列代码的优先处理顺序是先执行 for 循环中的 i = 0; i<6; i++ ,在 i1, 2, 3, 4, 5 的时候执行 i++ 操作,在当 i=6 时, for 循环停止,此时 i 的值为 6 , 再接着执行 console.log(i) 的操作打印出 6 一次,打印 6 的操作也开始按照 for 循环执行,一共打印到第六次结束。

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

将第一条代码 for 循环中的 i = 0; i<6; i++ 改为 let i = 0; i<6; i++ 即可打印出 0, 1, 2, 3, 4, 5

原因:

当 for 循环执行一遍之后打印出的数字会被 let 保存下来,for 循环一共会执行六次,每次打印的数字便会被保存,所以打印出的结果为 0, 1, 2, 3, 4, 5