事件循环(Event Loop)是JavaScript运行环境的核心机制之一,它决定了JavaScript代码的执行顺序。本文将为您介绍事件循环的基本概念和原理。
基本概念
事件循环是Node.js和浏览器环境中处理异步编程的核心机制。在事件循环中,JavaScript代码会依次执行,同时监听各种事件和异步操作。
- 宏任务(Macrotasks): 包括整体代码、定时器的回调、
setImmediate
回调、I/O操作等。 - 微任务(Microtasks): 包括
process.nextTick
、Promise
的回调、MutationObserver
等。
事件循环流程
- 执行代码: 执行栈中的代码,即宏任务。
- 检查微任务: 如果存在微任务,则立即执行。
- 执行宏任务: 执行下一个宏任务。
- 检查微任务: 重复步骤2,直到微任务队列为空。
- 重复流程: 重复步骤3-4,直到所有任务执行完毕。
实例分析
假设有以下代码:
console.log(1);
setTimeout(() => {
console.log(2);
}, 0);
console.log(3);
new Promise(resolve => {
resolve();
}).then(() => {
console.log(4);
});
执行顺序如下:
- 执行
console.log(1)
,输出 1。 - 执行
setTimeout
,将其回调放入宏任务队列。 - 执行
console.log(3)
,输出 3。 - 执行
new Promise
,其回调函数中的resolve
不会立即执行。 - 执行微任务,执行
resolve()
后的.then()
回调,输出 4。 - 执行宏任务,执行
setTimeout
的回调,输出 2。
扩展阅读
**注意**:以上内容为示例,实际情况可能因具体环境和版本而有所不同。