当前位置:网站首页>简单理解 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 执行
继续轮训查找(永动机一样)
边栏推荐
- 从卖产品到卖“链路”:20条策略 解读直播带货迭代玩法
- 【AGC】构建服务1-云函数示例
- 【Attention演变史】翻译模型seq2seq (第二弹)
- How to promote the implementation of rural revitalization
- zynq 记录
- Regular expression is incomplete
- 【着色器实现Glitch单项故障闪烁效果(与Television效果不同)_Shader效果第十四篇】
- Polygon zkEVM 基本概念
- 二叉树的遍历
- The Development and Current Situation of Object Detection
猜你喜欢
编译optimize源码实现过程
Use "green computing" technology to promote sustainable development of computing power
二叉树的遍历
Go study notes (Part 1) Configuring the Go development environment
刷题-洛谷-P1179 数字统计
Jmeter - Heap配置原因报错Invalid initial heap size: -Xms1024m -Xmx2048mError
Exploration and Practice of Database Governance
入门:人脸专集1 | 级联卷积神经网络用于人脸检测(文末福利)
基于HDF的LED驱动程序开发(2)
hash和history路由的区别
随机推荐
如何手动下载并安装 Visual Studio Code 的 SAP Fiori tools - Extension Pack
zynq records
The book "The Essence of Alipay Experience Design", a record of knowledge related to testing
多用户同时远程登录连接到一台服务器
Zip4j使用
【有奖征文】秋招特训,打造你的专属产品体验
JS手写JSON.stringify() (面试)
成品升级程序
二叉树的前序遍历
In July 2022, domestic database memorabilia
nr part calculation
Tensorflow2 环境搭建
【ASP.NET Core】 中间件
c sqlite...
Chrome 开发者工具 performance 标签页的用法
按需视觉识别:愿景和初步方案
完善的交叉编译环境记录 peta 生成的shell 脚本
ERC20转账压缩
awk 统计差值记录
如何让远在的老板看到你!----------来自财富中国网