Avatar

哨卫

前端工程师

Read Resume

事件循环机制

JavaScript 单线程如何处理异步操作?深入理解事件循环的工作原理。

基本概念

JavaScript 是单线程语言,通过事件循环机制处理异步操作,确保非阻塞的代码执行。

执行栈与任务队列

执行栈 (Call Stack):同步代码按顺序执行的地方

任务队列 (Task Queue):分为两种

  • 宏任务 - setTimeoutsetInterval、I/O 操作
  • 微任务 - Promiseasync/awaitMutationObserver

执行顺序

console.log('1'); // 同步代码

setTimeout(() => {
  console.log('2'); // 宏任务
}, 0);

Promise.resolve().then(() => {
  console.log('3'); // 微任务
});

console.log('4'); // 同步代码

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

事件循环步骤

  1. 执行同步代码 - 直到执行栈为空
  2. 处理微任务 - 执行所有微任务直到队列清空
  3. 执行一个宏任务 - 从宏任务队列取出一个执行
  4. 重复步骤 2-3

实际应用

  • 避免阻塞主线程 - 合理使用异步操作
  • 优化用户体验 - 保持界面响应性
  • 性能优化 - 理解代码执行优先级
2025 — Built by 哨卫