JavaScript 中的事件循环(Event Loop)是如何工作的?

JavaScript 中的事件循环(Event Loop)是如何工作的?

回答:
JavaScript 是单线程语言,但通过事件循环机制实现了异步操作。事件循环负责协调调用栈(Call Stack)、任务队列(Task Queue,也称宏任务队列)和微任务队列(Microtask Queue)的执行顺序。

其基本工作流程如下:

  1. 执行全局脚本(同步代码),压入调用栈并执行。
  2. 遇到异步操作(如 setTimeout、Promise、fetch 等),将其回调分别放入宏任务队列或微任务队列。
    • 宏任务(Macrotask)包括:setTimeout、setInterval、I/O、UI 渲染等。
    • 微任务(Microtask)包括:Promise.then/catch/finally、queueMicrotask、MutationObserver 等。
  3. 当调用栈为空时,事件循环先清空当前所有微任务(依次执行微任务队列中的所有回调)。
  4. 然后从宏任务队列中取出一个任务执行(每次只取一个)。
  5. 重复上述过程。

示例:

console.log('1');

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

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

console.log('4');

输出顺序: 1 → 4 → 3 → 2

解析:

  • console.log('1')console.log('4') 是同步代码,立即执行。
  • Promise.then 是微任务,在当前宏任务结束后立即执行。
  • setTimeout 是宏任务,需等待下一轮事件循环才会执行。

理解事件循环对掌握 JavaScript 异步编程、避免性能问题和调试复杂异步逻辑至关重要。

发表评论 (审核通过后显示评论):

昵称:
邮箱:
内容: