阅读器的事件轮回
阅读器事件轮回,根基面试中大部分都会问的,本文讲讲这个知识点。
事件轮回机制
事件轮回是负责施行代码、收集和处置事件乃至施行队列中的子任务的一套机制。
在事件轮回机制中,使用的栈数据构造便是施行上下文栈,每当有函数被调取时,便会创立相对应的施行上下文并将其入栈;使用到堆数据构造主如果为了表示一个大部分非构造化的内存区域存置对象;使用到的队列数据构造便是任务队列,主要用于存置异步任务。如下图:
施行上下文栈
在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,事件轮回机制也是它里面的实现。这里不展开讲了,想理解的本人去看文档。
感谢阅读!
需要加微信交流,可留言!
引荐教程:《JS教程》
以上就是阅读器的事件轮回的具体内容,更多请关注百分百源码网其它相关文章!