浏览器的事件循环的机制流程

发布时间:2020-06-15 14:07:15 作者:鸽子
来源:亿速云 阅读:178

前言

浏览器事件循环,基础面试中大部分都会问的,本文讲讲这个知识点。

事件循环机制

事件循环是负责执行代码、收集和处理事件以及执行队列中的子任务的一套机制。

在事件循环机制中,使用的栈数据结构便是执行上下文栈,每当有函数被调用时,便会创建相对应的执行上下文并将其入栈;使用到堆数据结构主要是为了表示一个大部分非结构化的内存区域存放对象;使用到的队列数据结构便是任务队列,主要用于存放异步任务。如下图:

执行上下文栈

在JavaScript代码运行过程中,会进入到不同的执行环境中,一开始执行时最先进入到全局环境,此时全局上下文首先被创建并入栈,之后当调用函数时则进入相应的函数环境,此时相应函数上下文被创建并入栈,当处于栈顶的执行上下文代码执行完毕后,则会将其出栈。这里说的栈就是执行上下文。

任务队列

在事件循环机制中,存在多种任务队列,其分为宏任务队列和微任务队列两种。

宏观任务

宏任务包括setTimeout、setInterval、I/O、UI rendering。

微任务

微任务包括Promise、Object.observe(已废弃)、MutationObserver(html5新特性)。

事件循环机制的流程

  1. 主线程执行JavaScript整体代码,形成执行上下文栈,当遇到各种任务源时将其所指定的异步任务挂起,接受到响应结果后将异步任务放入对应的任务队列中,直到执行上下文栈只剩全局上下文;

  2. 将微任务队列中的所有任务队列按优先级、单个任务队列的异步任务按先进先出的方式入栈并执行,直到清空所有的微任务队列;

  3. 将宏任务队列中优先级最高的任务队列中的异步任务按先进先出的方式入栈并执行;

  4. 重复第 2 3 步骤,直到清空所有的宏任务队列和微任务队列,全局上下文出栈。

简单来说,事件循环机制的流程就是,主线程执行JavaScript整体代码后将遇到的各个任务源所指定的任务分发到各个任务队列中,然后微任务队列和宏任务队列交替入栈执行直到清空所有的任务队列,全局上下文出栈。

最后

虽然Node.js也有事件循环,可是它和浏览器的事件循环完全不是一个东西。Node.js采用V8作为js的解析引擎,而I/O处理方面使用了自己设计的libuv,libuv是一个基于事件驱动的跨平台抽象层,封装了不同操作系统一些底层特性,对外提供统一的API,事件循环机制也是它里面的实现。这里不展开讲了,想了解的自己去看文档。

以上就是浏览器的事件循环详解的详细内容,更多请关注亿速云其它相关文章!

推荐阅读:
  1. javascript浏览器中事件循环机制的示例分析
  2. 浏览器中的事件循环是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

javascript 事件循环

上一篇:shell脚本基础知识梳理<六>:流程控制 while 循环语句

下一篇:Spring中的事务回滚

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》