浏览器事件循环

surile
2021-04-09 / 0 评论 / 10 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年04月09日,已超过242天没有更新,若内容或图片失效,请留言反馈。

浏览器事件循环

浏览器为什么要有事件循环呢?首先我们先了解下微任务和宏任务,再进行理解事件循环、

微任务

通俗的讲微任务也可以叫微任务队列,也就是JavaScript语言的内部的事件队列,在HTML标准中,并没有明确规定这个队列的事件源,通常认为有以下几种:

  • Promise的成功(.then)与失败(.catch)
  • MutationObserver
  • Object.observe(废弃)

以上三种除了第一个,其他两个可以认为是没有,实际上我们JS中能够使用的就只有Promise。

宏任务

通俗的讲宏任务也可以叫宏任务队列,浏览器中的外部事件源包含一下几种:

  • Dom操作
  • 用户交互
  • 网络请求
  • History API操作
  • 定时器

这些外部事件源可能很多,为了方便浏览器厂商优化,HTML标准中明确指出一个事件循环有一个或者是多个外部队列,而每一个外部事件源都有一个对应的外部队列。不同的事件源之间可以有不同的优先级(例如在网络请求和用户交互之间,浏览器可以优先处用户行为,从而让用户感觉更加流畅)。

事件循环

通俗的讲事件循环就是在代码运行开始的时候,在其内部创建了两个内存地址,用来分别存储微任务和宏任务,每当遇到微任务时,那么就会将该任务加入到微任务队列中进行执行,执行完成后将此任务从微任务中去除,宏任务也是如此,一直执行,当无如何任务时,循环结束。

0

评论 (0)

取消