← 返回文章列表
JavaScript·826 次阅读

事件循环(Event Loop)到底是什么?

事件循环(Event Loop)到底是什么?

JavaScript 是单线程语言,但它的异步能力一点都不弱,秘密就藏在事件循环里。

1. 先看一段代码

console.log('1')

setTimeout(() => {
  console.log('2')
}, 0)

Promise.resolve().then(() => {
  console.log('3')
})

console.log('4')

输出顺序是 1 4 3 2。要理解它,需要知道两个队列:

  • 宏任务队列(macrotask):setTimeout、setInterval、I/O 回调
  • 微任务队列(microtask):Promise.then、queueMicrotask、MutationObserver

2. 事件循环的执行顺序

  1. 执行同步代码(调用栈)
  2. 调用栈清空后,清空所有微任务
  3. 取一个宏任务执行
  4. 再次清空微任务,如此往复

所以上面的例子里,Promise.then(微任务)永远比 setTimeout(宏任务)先执行,哪怕延时写的是 0。

3. 在 Node.js 中

Node.js 的事件循环由 libuv 提供,分为 timers、poll、check 等阶段。每个阶段切换之间同样会清空微任务:

setTimeout(() => console.log('timer'), 0)
setImmediate(() => console.log('immediate'))
Promise.resolve().then(() => console.log('promise'))

记住一句话:同步代码 → 微任务 → 宏任务,绝大多数面试题都能拿下。

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4