JS 函数的执行时机

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

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  • 变量i在for循环中执行i++.
  • 最后一次i++ ,i=6,for循环不满足条件退出循环.
  • JS是单线程执行任务,先执行同步任务,碰到异步任务会挂在异步线程中等待触发
  • 异步线程中的任务被触发,进入到消息队列.
  • JS执行完同步任务,会到消息队里中取出异步任务执行.
  • 一共执行6次console.log(i),在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一起用的时候JS做了优化,每次循环会多创建一个i.

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

 for (var i = 0; i < 6; i++) {
        (function f(i) {
          setTimeout(() => {
            console.log(i);
          }, 0);
        })(i);
      }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。