JavaScript 是单线程语言,但通过事件循环机制实现了非阻塞的异步处理。理解事件循环是掌握异步编程的核心!

事件循环的核心概念

事件循环是 JavaScript 运行时处理异步任务的机制,主要包含以下流程:

  1. 调用栈:执行同步代码的栈结构
  2. 任务队列:存放待处理的异步任务(宏任务/微任务)
  3. 消息泵:持续检查任务队列并执行任务
事件循环示意图

宏任务与微任务的区别

类型 执行时机 示例
宏任务 每次事件循环结尾 setTimeout, setInterval
微任务 当前任务结束后立即 Promise.then, MutationObserver

⚠️ 微任务优先级高于宏任务,这会导致「微任务队列清空」现象

典型执行顺序演示

console.log('script start');

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

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

console.log('script end');

输出结果会是:

script start
script end
Promise
setTimeout

常见应用场景

  • DOM 事件处理:如点击事件、输入事件
  • 定时器setTimeout/setInterval
  • 异步 I/O:网络请求、文件读写
  • Promise 链式调用.then()/.catch()

扩展阅读

想进一步了解 JavaScript 异步编程的其他特性?可以查看我们的 JavaScript 异步编程指南Promise 原理详解