浏览器的事件机制-Eventloop
2020-03-26 本文已影响0人
Doter
循环机制前,我们先要会区分:宏任务与微任务
宏任务Task与微任务Microtask
JS中的宏任务和微任务的区别和用法
宏任务Task与微任务Microtask都是异步任务。
宏任务一般是:包括<script>,setTimeout,setInterval、I/O、UI render, event事件的callback。
微任务主要是:Promise、Object.observe、MutationObserver。
关于宏任务与微任务Microtask的如何调度
建议直接参考该文章:
动图学 JavaScript 之:事件循环
简单描述就是:
首先有宏任务队列Tasks
和空的微任务队列Microtasks
- 开始执行
Tasks
中的第一个宏任务
- 当某个
task宏任务
在执行过程中除了正常逻辑代码及调用栈,如果遇到宏任务
则添加到Tasks
,遇到微任务
则添加到Microtasks
.直到该任务结束。 - 接下来执行依次执行
Microtasks
中的微任务
(即上面的宏任务产生了Microtasks
),逻辑与执行宏任务一样。最终执行完该微任务队列后。 - 接着执行下一个
task宏任务
。
ok,就是这么简单。
image.png
推荐阅读下方参考文章中英文原文,然后自己找到代码试例,查看其执行流程
参考文章:
Tasks, microtasks, queues and schedules(译文)
Tasks, microtasks, queues and schedules(原文)