JS 函数的执行时机

·  阅读 49

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

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

我的理解:因为setTimeout()方法,是一个定时器,就是当你把手上的事情干完之后,马上干另一间事情。如上代码中,每次到console.log(i)这一步时,都相当于设了个闹钟,放这了,我先把手头的for循环执行完,再来执行这个闹钟;而等这个for循环执行完之后,i 已经变成了6;此时有6个闹钟等着执行,就输入了六个六

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

由于JS在for和let一起用的时候会在每次循环多创建一个i,因此我们可以用for+let一起用的方法来打印0,1,2,3,4,5

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

其他打印 0、1、2、3、4、5 的方法

利用函数自执行的方式,把当前 for 循环过程中的 i 传递进去,构建出块级作用域

let i=0
for (i = 0; i < 10; i++) {
  (i => {
    setTimeout(() => {
      console.log(i);
    }, 1000)
  })(i)
}
复制代码
分类:
前端
标签:
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改