微任务与宏任务与eventloop
首先我们需要了解一个概念,在promise执行之前是同步任务,再.then和.catch之后变成微任务
执行完同步任务之后,优先执行微任务
执行顺序是:
同步任务 ==> 微任务 ==>宏任务
js是单线程的语言,不会同时执行两行代码,当我们出现alert弹窗时,是无法执行下面的console.info的
setTimeout(_ => console.log(4))new Promise(resolve => {resolve()console.log(1)
}).then(_ => {console.log(3)
})console.log(2)
通过上面的了解,此时应该很好得出这道笔试题的答案了
没错,是1 2 3 4
所有的异步回调函数,执行的结果会进入一个队列,整个队列就是一个宏任务;
在博客园里一篇文章就形象的解释了宏任务和微任务的执行过程:
A B C三个人同时在银行某个柜台办理存钱业务(宏任务),A在存完钱之后,没有离开,选择购买理财和基金(中途产生了微任务),那么这个时候B C必须要在A完成购买基金理财之后,才能执行宏任务
再来解释一下eventloop,翻译过来就是事件循环
每办理完一个业务,柜员就会问当前的客户,是否还有其他需要办理的业务。
(检查还有没有微任务需要处理)
而客户明确告知说没有事情以后,柜员就去查看后边还有没有等着办理业务的人。
(结束本次宏任务、检查还有没有宏任务需要处理)
这个检查的过程是持续进行的,每完成一个任务都会进行一次,而这样的操作就被称为Event
Loop。(这是个非常简易的描述了,实际上会复杂很多)
借此再复习一下,async/await这种语法糖结构
setTimeout(_ => console.log(4))async function main() {console.log(1)await Promise.resolve()console.log(3)
}main()console.log(2)
async函数在await之前的代码都是同步执行的,
可以理解为await之前的代码属于new Promise时传入的代码,
await之后的所有代码都是在Promise.then中的回调
微任务与宏任务与eventloop相关推荐
- 详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
队列在前端中的应用 一.队列是什么 二.应用场景 三.前端与队列:事件循环与任务队列 1.event loop 2.JS如何执行 3.event loop过程 4. DOM 事件和 event loo ...
- JavaScript异步编程【上】 -- 同步和异步、事件循环(EventLoop)、微任务和宏任务、回调函数
文章内容输出来源:拉勾教育 大前端高薪训练营 前言 在我们学习JavaScript中,我们知道,JavaScript的执行环境是单线程的.所谓单线程是指一次只能完成一个任务,如果有多个任务,就必须排队 ...
- 微任务宏任务以及EventLoop详解
先总结下那些我们常用的api是宏任务,哪些是微任务. 宏任务 scripts 正常同步脚本 setTimeout 定时脚本 setInterval 定时循环执行 setImmediate node 常 ...
- async js 返回值_图文讲解浏览器执行JS过程中的微任务和宏任务
背景 我们知道浏览器有一个特定的事件执行机制,专业名词叫做Event Loop.如下图所示,浏览器会优先执行同步代码,遇到异步的代码时,会被挂起并在需要执行的时候加入到 Task(有多种 Task) ...
- 【Day09】JavaScript 为什么要区分微任务和宏任务
JavaScript 为什么要区分微任务和宏任务 区分微任务和宏任务是为了将异步队列任务划分优先级,通俗的理解就是为了插队. 一个 Event Loop,Microtask 是在 Macrotask ...
- ajax是宏任务还是微任务,(滴滴面试)事件循环Event Loop及微任务和宏任务的执行过程详解...
之前一直在面试,对于一些大厂面试题真的还是很注重原理和基础的, 还有就是数据结构和算法这种,校招的话,这些是很重要的, 前天和滴滴的人面试,问的真心觉得不难,而且也都是现在面试前端很常见的问题, 对于 ...
- 微任务,宏任务,DOM渲染的执行顺序
event loop过程 同步代码,一行一行放在Call Stack执行 遇到异步先记录下来,等待时机(定时,网络请求) 时机一到立马推入Callback Queue中 如Call Stack为空(同 ...
- 什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?
文章目录 前言 一.那么宏任务和微任务是什么呢? 二.宏任务.微任务有哪些? 三.宏任务.微任务是怎么执行的? 四.案例 总结 前言 关于 Javascript 的执行顺序,众所周知是按照顺序自上而下 ...
- 同步任务和异步任务(微任务和宏任务)
同步任务和异步任务(微任务和宏任务) JavaScript是一门单线程语言 分为同步任务和异步任务 同步任务是指在主线程上排队执行的任务, 只有前一个任务执行完毕,才能继续执行下一个任务. 异步任务指 ...
最新文章
- Oracle EXPDP/IMPDP示例
- Django 笔记4 -- 模板
- python输入程序_python程序的输入输出(acm的几个小程序)
- ubantu安装cuda和cudnn
- 今天我点亮了CSDN博客专家殊荣
- 第二十四章 异常和错误处理 6异常类与模板的关系
- 软件测试常用的黑盒测试方法有哪些,简述什么是黑盒测试方法(最常用的黑盒测试方法)...
- Xcode9引第三方报错 linker command failed with exit code 1 (use -v to see invocation)
- Verilog实现按键消抖
- 运算放大器-偏置电流是怎样影响运放电路的
- 手机写java_手机怎么写java
- CCRC信息安全服务资质审核费用是多少?
- 游戏思考30:技能碰撞检测分类枚举及逆水寒魔兽老兵服副本攻略(英雄武林风云录,后续更新舞阳城、扬州、清明等副本攻略)
- 【PS技巧】如何校正倾斜的图片
- LabVIEW编程LabVIEW开发 研华PCIE-1751更改DIO方向 例程与相关资料
- 诺基亚Lumia520限时秒杀价45美元
- 并查集专题(亲戚,格子游戏,银河英雄传说)
- SSO单点登入原理及简单实现
- 数据结构第二章(单链表部分)学习笔记
- 开源安全审计系统漏洞扫描工具lynis
热门文章
- clamav程序的研究总结
- python 扫盲系列(1)
- scikit-learn学习笔记(三)Generalized Linear Models ( 广义线性模型 )
- Spark Streaming 实战案例(二) Transformation操作
- Spark与Mysql(JdbcRDD)整合开发
- XGBoost的PU-Learning
- HDFS、MR、Kafka、Storm、Spark、Hbase、Redis原理图
- 如何自动判断域名是否被微信拦截 被微信屏蔽的域名网址如何正常打开使用
- 这是一个测试:测试博客在浏览器中是否可以显示数学内容以及代码格式
- composer的简单使用