JavaScript 事件循环2025年4月23日 | 阅读 4 分钟 JavaScript 中的事件循环是一种用于管理多个代码块执行的机制,其中包括一些异步任务,如定时器、回调和 Promise。 JavaScript 是单线程的。如果你想在不阻塞主链的情况下管理多个任务的执行,那么你需要使用事件循环。 简而言之,JavaScript 中的事件循环通过高效地处理任务来启用异步编程。它还有助于确保 API 请求、定时器和用户交互等异步操作不会阻塞其他代码的执行。 示例编译并运行输出 Start End Promise Resolved setTimeout Callback 说明 在上面的代码中,console.log("Start") 会立即执行。setTimeout 会调度一个回调函数,但不会立即执行。Promise.resolve().then() 创建一个立即执行的 Promise,这允许回调函数被执行。console.log(“Start”) 会先执行。console.log("End") 会立即执行。 事件循环的组成部分事件循环确保任务按正确的顺序执行,从而实现异步编程。事件循环有两个组成部分: 调用栈 (Call Stack): 在 JavaScript 事件循环中,调用栈用于跟踪所有待执行的操作。当一个函数执行完毕时,它会从栈中弹出。 事件队列 (Event Queue): 事件队列负责管理函数提交到栈中进行处理。它利用队列数据结构,保持操作执行的顺序。定时器和事件等异步任务会在调用栈清空后排队等待执行。 事件循环如何工作?在 JavaScript 中,事件循环通过以下几个步骤工作: ![]() 调用栈 (Call stacks): 在 JavaScript 事件循环中,有一个调用栈以 LIFO(后进先出)的顺序管理函数执行。 Web APIs: 在 JavaScript 中,这包括 setTimeout、setInterval、fetch、DOM 事件和其他异步操作。 回调队列 (Callback Queue): 当一个异步操作(例如定时器、API 调用或事件)准备好执行时,它会被放入事件队列。 微任务队列 (Microtask Queue): Promises 和其他微任务会被放入微任务队列,该队列在任务队列之前处理。 事件循环 (Event Loop): 它会不断检查调用栈,如果调用栈为空,则将队列中的任务移入栈中执行。 事件循环中的微任务与宏任务微任务 (Microtasks): 它们是优先级更高的任务,在宏任务之前运行,例如 Promises 和 queueMicrotask()。 宏任务 (Macrotasks): 它们是优先级较低的任务,在微任务之后运行,例如 setTimeout、setInterval 和 DOM 事件。 示例编译并运行输出 Start End Microtask Macrotask 示例示例 1:setTimeout 示例编译并运行输出 Start End Inside setTimeout 示例 2:Promise 和微任务 示例编译并运行输出 Start End Inside Promise 示例 3:Promise 与 setTimeout 的对比 示例编译并运行输出 End Promise Timeout 事件循环的阶段
为什么事件循环很重要?事件循环使 JavaScript 能够执行非阻塞 I/O 操作,这对于现代 Web 应用程序至关重要。让我们看看它为什么重要: 高效的异步处理在 JavaScript 中,事件循环会管理数据获取、用户输入处理或使用定时器等任务,而不会阻塞其他代码的执行。 用户交互在 JavaScript 中,利用事件循环可以让我们在处理多个用户交互的同时执行后台操作,而不会减慢用户界面。 单线程事件循环通过将任务委托给任务队列并以不阻塞主线程的顺序执行它们来高效地处理多个操作。 结论总而言之,JavaScript 的事件循环是一种机制,它使单线程语言能够在不阻塞主线程的情况下管理异步任务。它与处理同步代码的调用栈以及异步任务等待执行的事件队列一起工作。 |
在 JavaScript 中,箭头函数使用 `=>` 符号提供了一种简洁简单的定义函数的方式,它提供了隐式的返回值和词法作用域,使其成为编写更清晰、更易读代码的首选。在 JavaScript 中,可以这样编写一个箭头函数……
阅读 4 分钟
JavaScript 中的 `setInterval()` 方法用于在每个给定的时间间隔重复调用指定的函数。它会在指定的时间间隔内评估表达式或调用函数。此方法会持续调用函数,直到窗口关闭或调用 `clearInterval()` 方法为止……
阅读 3 分钟
JavaScript 中的 `setTimeout()` 方法用于在等待指定的时间间隔后执行一个函数。此方法返回一个表示计时器 ID 值的数字值。与 `setInterval()` 方法不同,`setTimeout()` 方法仅执行一次函数。此方法……
阅读 3 分钟
在 JavaScript 中,回调函数是用作另一个函数的参数并在某些操作完成后执行的函数。简单来说,JavaScript 中的回调函数是要在另一个函数执行后执行的函数……
阅读 4 分钟
JavaScript 是一种通用且功能强大的语言,已成为现代 Web 开发的基石。使其具有灵活性的关键特性之一是高阶函数(HOF)的概念。高阶函数是可以将其他函数作为参数接收和/或返回函数的函数……
阅读 15 分钟
教程 编译器 Promise 闭包 DOM JavaScript 中的面试题,闭包允许从内部函数访问外部函数的外部作用域,即使在外部函数关闭后也是如此……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India