事件循环(Event Loop)是JavaScript运行环境的核心机制之一,它决定了JavaScript代码的执行顺序。本文将为您介绍事件循环的基本概念和原理。

基本概念

事件循环是Node.js和浏览器环境中处理异步编程的核心机制。在事件循环中,JavaScript代码会依次执行,同时监听各种事件和异步操作。

  • 宏任务(Macrotasks): 包括整体代码、定时器的回调、setImmediate回调、I/O操作等。
  • 微任务(Microtasks): 包括process.nextTickPromise的回调、MutationObserver等。

事件循环流程

  1. 执行代码: 执行栈中的代码,即宏任务。
  2. 检查微任务: 如果存在微任务,则立即执行。
  3. 执行宏任务: 执行下一个宏任务。
  4. 检查微任务: 重复步骤2,直到微任务队列为空。
  5. 重复流程: 重复步骤3-4,直到所有任务执行完毕。

实例分析

假设有以下代码:

console.log(1);

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

console.log(3);

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

执行顺序如下:

  1. 执行 console.log(1),输出 1。
  2. 执行 setTimeout,将其回调放入宏任务队列。
  3. 执行 console.log(3),输出 3。
  4. 执行 new Promise,其回调函数中的 resolve 不会立即执行。
  5. 执行微任务,执行 resolve() 后的 .then() 回调,输出 4。
  6. 执行宏任务,执行 setTimeout 的回调,输出 2。

扩展阅读


**注意**:以上内容为示例,实际情况可能因具体环境和版本而有所不同。