JavaScript 是单线程语言,但通过事件循环机制实现了非阻塞的异步处理。理解事件循环是掌握异步编程的核心!
事件循环的核心概念
事件循环是 JavaScript 运行时处理异步任务的机制,主要包含以下流程:
- 调用栈:执行同步代码的栈结构
- 任务队列:存放待处理的异步任务(宏任务/微任务)
- 消息泵:持续检查任务队列并执行任务
宏任务与微任务的区别
类型 | 执行时机 | 示例 |
---|---|---|
宏任务 | 每次事件循环结尾 | 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 原理详解。