当前位置:首页 > JavaScript

js eventloop实现

2026-02-01 05:35:07JavaScript

Event Loop 的基本概念

JavaScript 的 Event Loop 是一种机制,用于处理异步任务和事件回调。它基于单线程模型,通过任务队列(Task Queue)和微任务队列(Microtask Queue)来调度任务执行顺序。

核心组成部分

  • 调用栈(Call Stack):用于执行同步代码,遵循先进后出(LIFO)原则。
  • 任务队列(Task Queue):存放宏任务(如 setTimeoutsetInterval、I/O 操作)。
  • 微任务队列(Microtask Queue):存放微任务(如 Promise.thenMutationObserver)。

执行流程

  1. 同步代码进入调用栈执行,遇到异步任务时,将回调函数注册到对应的队列。
  2. 调用栈清空后,优先检查微任务队列并执行所有微任务。
  3. 微任务队列清空后,从任务队列中取出一个宏任务执行。
  4. 重复上述过程,形成事件循环。

代码示例

console.log("Start"); // 同步任务

setTimeout(() => {
  console.log("Timeout"); // 宏任务
}, 0);

Promise.resolve().then(() => {
  console.log("Promise"); // 微任务
});

console.log("End"); // 同步任务

输出顺序

js eventloop实现

Start  
End  
Promise  
Timeout

关键点

  • 微任务优先级高于宏任务。
  • process.nextTick(Node.js)和 MutationObserver 的优先级高于普通微任务。
  • 避免长时间运行的同步代码阻塞事件循环。

常见宏任务与微任务

  • 宏任务setTimeoutsetIntervalrequestAnimationFrame、I/O。
  • 微任务Promise.thenqueueMicrotaskMutationObserver

通过理解 Event Loop 的机制,可以更好地优化异步代码的执行顺序和性能。

标签: jseventloop
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…