21.事件循环(Event Loop)完整解析 副本.md

查看飞书原文 ↗3,323 字符

1. 核心概念 (Core Concept)

事件循环(Event Loop)是 JavaScript 执行异步操作的机制。它协调浏览器(或 Node.js 环境)如何处理任务队列(包含宏任务和微任务),并在主线程空闲时执行这些任务,从而实现非阻塞的 I/O 操作和响应性用户界面。

2. 为什么需要它? (The "Why")

3. API 与用法 (API & Usage)

事件循环本身是一个核心概念和运行时机制,并非直接对外暴露的 API。但我们可以通过理解以下与事件循环紧密相关的 API 来观察其行为:

代码示例 (浏览器环境):

console.log('1. Start');

setTimeout(function() {
  console.log('4. setTimeout callback (Macro task)');
}, 0); // 尽管延迟为0,但它仍然是一个宏任务

Promise.resolve('Promise resolved').then(function(value) {
  console.log('3. Promise resolved callback (Micro task):', value);
});

console.log('2. End');

// 预期输出顺序 (通常情况下):
// 1. Start
// 2. End
// 3. Promise resolved callback (Micro task): Promise resolved
// 4. setTimeout callback (Macro task)

解释:

  1. console.log('1. Start') 同步执行。
  2. setTimeout 的回调被放入宏任务队列。
  3. Promise.resolve().then 的回调被放入微任务队列。
  4. console.log('2. End') 同步执行。
  5. 主线程同步代码执行完毕,进入事件循环。
  6. 事件循环检查微任务队列,发现 Promise 的回调,执行 console.log('3...')。
  7. 微任务队列清空。
  8. 事件循环检查宏任务队列,发现 setTimeout 的回调,执行 console.log('4...')。
  9. 进入下一次事件循环迭代。

4. 关键注意事项 (Key Considerations)

5. 参考资料 (References)


原文链接与附件索引