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

