js事件循环

(function a () {
  console.log(1);
  setTimeout(function(){console.log(2);}, 1000);  // 第3行
  console.log(3);
  setTimeout(function(){console.log(4);}, 0);    // 第5行
})()

今天查看事件循环的时候看到这么一句话:setTimeout 的回调函数只是会被添加至任务队列,而不是立即执行。
我想问一下先添加的就先执行(先进先出)吗?还是说会把任务队列里的任务按照延迟时间排序,时间越少的越先执行?那如果第3行和第5行的时间都是1000毫秒呢?哪个先执行?

阅读 2.8k
5 个回答

先添加的先进定时器队列
定时器队列里先到时间的先进任务队列。
然后任务队列里的先进先出。

是在 1000毫秒后放进队列,而不是放进队列,等待1000毫秒后执行,所以是时间少的先执行,时间一样的情况下,写在前面的先执行

都设置 1000 会先执行第三行
你可以看我另外一个问题的回答

1000毫秒后添加至任务队列

执行结果应该是 1 3 4 2

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题