首先我们需要了解一个概念,在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相关推荐

  1. 详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务

    队列在前端中的应用 一.队列是什么 二.应用场景 三.前端与队列:事件循环与任务队列 1.event loop 2.JS如何执行 3.event loop过程 4. DOM 事件和 event loo ...

  2. JavaScript异步编程【上】 -- 同步和异步、事件循环(EventLoop)、微任务和宏任务、回调函数

    文章内容输出来源:拉勾教育 大前端高薪训练营 前言 在我们学习JavaScript中,我们知道,JavaScript的执行环境是单线程的.所谓单线程是指一次只能完成一个任务,如果有多个任务,就必须排队 ...

  3. 微任务宏任务以及EventLoop详解

    先总结下那些我们常用的api是宏任务,哪些是微任务. 宏任务 scripts 正常同步脚本 setTimeout 定时脚本 setInterval 定时循环执行 setImmediate node 常 ...

  4. async js 返回值_图文讲解浏览器执行JS过程中的微任务和宏任务

    背景 我们知道浏览器有一个特定的事件执行机制,专业名词叫做Event Loop.如下图所示,浏览器会优先执行同步代码,遇到异步的代码时,会被挂起并在需要执行的时候加入到 Task(有多种 Task) ...

  5. 【Day09】JavaScript 为什么要区分微任务和宏任务

    JavaScript 为什么要区分微任务和宏任务 区分微任务和宏任务是为了将异步队列任务划分优先级,通俗的理解就是为了插队. 一个 Event Loop,Microtask 是在 Macrotask ...

  6. ajax是宏任务还是微任务,(滴滴面试)事件循环Event Loop及微任务和宏任务的执行过程详解...

    之前一直在面试,对于一些大厂面试题真的还是很注重原理和基础的, 还有就是数据结构和算法这种,校招的话,这些是很重要的, 前天和滴滴的人面试,问的真心觉得不难,而且也都是现在面试前端很常见的问题, 对于 ...

  7. 微任务,宏任务,DOM渲染的执行顺序

    event loop过程 同步代码,一行一行放在Call Stack执行 遇到异步先记录下来,等待时机(定时,网络请求) 时机一到立马推入Callback Queue中 如Call Stack为空(同 ...

  8. 什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?

    文章目录 前言 一.那么宏任务和微任务是什么呢? 二.宏任务.微任务有哪些? 三.宏任务.微任务是怎么执行的? 四.案例 总结 前言 关于 Javascript 的执行顺序,众所周知是按照顺序自上而下 ...

  9. 同步任务和异步任务(微任务和宏任务)

    同步任务和异步任务(微任务和宏任务) JavaScript是一门单线程语言 分为同步任务和异步任务 同步任务是指在主线程上排队执行的任务, 只有前一个任务执行完毕,才能继续执行下一个任务. 异步任务指 ...

最新文章

  1. Oracle EXPDP/IMPDP示例
  2. Django 笔记4 -- 模板
  3. python输入程序_python程序的输入输出(acm的几个小程序)
  4. ubantu安装cuda和cudnn
  5. 今天我点亮了CSDN博客专家殊荣
  6. 第二十四章 异常和错误处理 6异常类与模板的关系
  7. 软件测试常用的黑盒测试方法有哪些,简述什么是黑盒测试方法(最常用的黑盒测试方法)...
  8. Xcode9引第三方报错 linker command failed with exit code 1 (use -v to see invocation)
  9. Verilog实现按键消抖
  10. 运算放大器-偏置电流是怎样影响运放电路的
  11. 手机写java_手机怎么写java
  12. CCRC信息安全服务资质审核费用是多少?
  13. 游戏思考30:技能碰撞检测分类枚举及逆水寒魔兽老兵服副本攻略(英雄武林风云录,后续更新舞阳城、扬州、清明等副本攻略)
  14. 【PS技巧】如何校正倾斜的图片
  15. LabVIEW编程LabVIEW开发 研华PCIE-1751更改DIO方向 例程与相关资料
  16. 诺基亚Lumia520限时秒杀价45美元
  17. 并查集专题(亲戚,格子游戏,银河英雄传说)
  18. SSO单点登入原理及简单实现
  19. 数据结构第二章(单链表部分)学习笔记
  20. 开源安全审计系统漏洞扫描工具lynis

热门文章

  1. clamav程序的研究总结
  2. python 扫盲系列(1)
  3. scikit-learn学习笔记(三)Generalized Linear Models ( 广义线性模型 )
  4. Spark Streaming 实战案例(二) Transformation操作
  5. Spark与Mysql(JdbcRDD)整合开发
  6. XGBoost的PU-Learning
  7. HDFS、MR、Kafka、Storm、Spark、Hbase、Redis原理图
  8. 如何自动判断域名是否被微信拦截 被微信屏蔽的域名网址如何正常打开使用
  9. 这是一个测试:测试博客在浏览器中是否可以显示数学内容以及代码格式
  10. composer的简单使用