当前位置:网站首页>简单理解 JS 事件循环
简单理解 JS 事件循环
2022-08-04 19:51:00 【无知小九】
因为 js 是单线程运行的,在代码执行的时候,通过将不同函数的执行上下文压入执行栈中来保证代码的有序执行。在执行同步代码的时候,如果遇到了异步事件,js 引擎并不会一直等待其返回结果,而是会将这个事件挂起,继续执行执行栈中的其他任务。当异步事件执行完毕后,再将异步事件对应的回调加入到与当前执行栈中不同的另一个任务队列中等待执行。任务队列可以分为宏任务对列和微任务对列,当当前执行栈中的事件执行完毕后,js 引擎首先会判断微任务对列中是否有任务可以执行,如果有就将微任务队首的事件压入栈中执行。当微任务对列中的任务都执行完成后再去判断宏任务对列中的任务。
微任务包括了 promise 的回调、node 中的 process.nextTick 、对 Dom 变化监听的 MutationObserver。
宏任务包括了 script 脚本的执行、setTimeout ,setInterval ,setImmediate 一类的定时事件,还有如 I/O 操作、UI 渲染等。

简单来说
Js 是单线程运行的, 异步要基于回调来实现
而 event loop 就是异步回调的实现原理
JS 如何执行: 一行行执行, 先把同步执行完再执行异步
同步代码, 一行一行放在 Call Stack 执行
遇到异步, 先记录下, 等待时机(定时, 网络请求等)
时机到了, 移动到 Callback Queue
Callstack 为空(同步代码执行完), Event Loop开始工作
轮询查找 Callback Queue, 如有则移动到 Call Stack 执行
继续轮训查找(永动机一样)
边栏推荐
猜你喜欢
随机推荐
getBoundingClientRect
Defaced Fingerprint Recovery and Identification
SAP 电商云 Accelerator 和 Spartacus UI 的工作机制差异
How to manually download and install SAP Fiori tools - Extension Pack for Visual Studio Code
C#移动OA办公系统源码(基于微信企业号)
PostgreSQL的 SPI_接口函数
EasyUi常用代码
华为WLAN技术:AP上线及相关模板的配置实验
Highlights of some performance tests
awk 统计差值记录
Use "green computing" technology to promote sustainable development of computing power
如何让远在的老板看到你!----------来自财富中国网
In July 2022, domestic database memorabilia
QT 小知识随记
如何手动下载并安装 Visual Studio Code 的 SAP Fiori tools - Extension Pack
对比几类主流的跨端技术方案
ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators
c sqlite ... ...
win10终端中如何切换磁盘
The book "The Essence of Alipay Experience Design", a record of knowledge related to testing








