你真的明白JS中的Event Loop是如何运作的吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1720个文字,预计阅读时间需要7分钟。
目录 + setTimeout + 定时器并不准 + 宏任务和微任务 + 一道经典异步题 + 结尾 + Event Loop,简单翻译就是:事件循环 + 是JS语言下实现运行时的一个机制。+ JS的异步并不像其他语言(例如Java)的异步。
目录
- setTimeout 定时器并不准
- 宏任务和微任务
- 一道经典异步题
- 结尾
Event Loop,简单翻译就是事件循环,是 JS 语言下实现运行时的一个机制。
JS 的异步并不像其他语言(比如 Java)的异步那样可以实现真正的并发执行,本身其实是个单线程。
JS 是维护了一个任务队列,每当要执行一些异步任务,比如定时器或者是点击按钮触发的事件响应函数。它们不会立即执行,而是放到这个队列里,等待已经在排队的其他任务先执行完,才轮到它们。
队列是一个操作受限的有序列表,表现为为先进入的元素必须先出去,即 “先进先出”,很像排队的感觉。
不过也有一些特殊的队列,比如优先级队列,它是优先级高的元素先出队。
之所以叫 Event Loop,因为它的逻辑可以描述为下面代码:
while (queue.waitForMessage()) { queue.processNextMessage(); }
当一个任务被完成后,队列会变成等待下一个任务状态,然后处理下一个任务,如此循环往复。
本文共计1720个文字,预计阅读时间需要7分钟。
目录 + setTimeout + 定时器并不准 + 宏任务和微任务 + 一道经典异步题 + 结尾 + Event Loop,简单翻译就是:事件循环 + 是JS语言下实现运行时的一个机制。+ JS的异步并不像其他语言(例如Java)的异步。
目录
- setTimeout 定时器并不准
- 宏任务和微任务
- 一道经典异步题
- 结尾
Event Loop,简单翻译就是事件循环,是 JS 语言下实现运行时的一个机制。
JS 的异步并不像其他语言(比如 Java)的异步那样可以实现真正的并发执行,本身其实是个单线程。
JS 是维护了一个任务队列,每当要执行一些异步任务,比如定时器或者是点击按钮触发的事件响应函数。它们不会立即执行,而是放到这个队列里,等待已经在排队的其他任务先执行完,才轮到它们。
队列是一个操作受限的有序列表,表现为为先进入的元素必须先出去,即 “先进先出”,很像排队的感觉。
不过也有一些特殊的队列,比如优先级队列,它是优先级高的元素先出队。
之所以叫 Event Loop,因为它的逻辑可以描述为下面代码:
while (queue.waitForMessage()) { queue.processNextMessage(); }
当一个任务被完成后,队列会变成等待下一个任务状态,然后处理下一个任务,如此循环往复。

