宏任务与微任务:

 异步任务分为 宏任务(macrotask) 与 微任务 (microtask),不同的API注册的任务会依次进入自身对应的队列中,然后等待 Event Loop 将它们依次压入执行栈中执行。

  1. 宏任务(macrotask):script(整体代码)、setTimeout、setInterval、UI 渲染、 I/O、postMessage、 MessageChannel、setImmediate(Node.js 环境)
  2. 微任务(microtask):Promise、 MutaionObserver、process.nextTick(Node.js环境)

Event Loop(事件循环):

Event Loop(事件循环)中,每一次循环称为 tick, 每一次tick的任务如下:

  1. 执行栈选择最先进入队列的宏任务(通常是script整体代码),如果有则执行
  2. 检查是否存在 微任务 (microtask),如果存在则不停的执行,直至清空  微任务 (microtask) 队列
  3. 更新render(每一次事件循环,浏览器都可能会去更新渲染)
  4. 重复以上步骤形成循环
  5. 宏任务 > 所有微任务 > 宏任务

代码实例

setTimeout(function () {console.log(1);
});new Promise(function (resolve, reject) {console.log(2)resolve(3)
}).then(function (val) {console.log(val);
})console.log(4);

执行讲解

  1. 先执行script同步代码:执行new Promise中的console.log(2),then后面的不执行属于微任务
  2. 然后执行console.log(4)
  3. 执行完script宏任务后,执行微任务,console.log(3),没有其他微任务了
  4. 执行另一个宏任务,定时器,console.log(1)

 结果:2=>4=>3=>1

一分钟搞懂js事件循环相关推荐

  1. 彻底搞懂JS事件循环机制(event loop)

    知识点: js异步实现 EventLoop.消息队列 宏任务 与 微任务 同步模式与异步模式 首先要确定 js是单线程语言,js在设计之初用作用户互动,以及操作DOM.这决定了它只能是单线程(例如多线 ...

  2. js异步等待完成后再进行下一步操作_彻底搞懂JS事件中的循环机制 Event Loop

    我们都知道JavaScript是单线程语言,就是因为单线程的特性,就不得不提js中的同步和异步 一.同步和异步 所谓单线程,无非就是同步队列和异步队列,js代码是自上向下执行的,在主线程中立即执行的就 ...

  3. JS事件循环机制:同步与异步任务 之 宏任务 微任务

    JS事件循环机制:同步与异步任务 之 宏任务 微任务 阅读目录 javascript事件循环 setTimeout和setInterval中的执行时间 宏任务和微任务 javascript是单线程,一 ...

  4. 看聊天记录都学不会C语言?太菜了吧》(17)5分钟搞懂指针与多重指针

    若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证. 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新 ...

  5. 5分钟搞懂用户态,内核态

    5分钟搞懂用户态,内核态 1. 什么是用户态,内核态 用户态就是提供应用程序运行的空间,为了使应用程序访问到内核管理的资源例如CPU,内存,I/O.内核必须提供一组通用的访问接口,这些接口就叫系统调用 ...

  6. 微信小程序从入坑到放弃二十九:一个小场景搞懂冒泡事件bindtap和catchtap的区别

    摘要: 在微信小程序中,bindtap事件会产生冒泡,若不加以拦截,会一直冒泡到顶端.在某些情况下,一次点击会触发若干点击事件.为了防止冒泡,使用catchtap即可解决问题.在有全屏半透明背景的弹出 ...

  7. Linux事件循环阻塞,深入浅析Node.js 事件循环、定时器和process.nextTick()

    什么是事件循环 尽管JavaScript是单线程的,但通过尽可能将操作放到系统内核执行,事件循环允许Node.js执行非阻塞I/O操作. 由于现代大多数内核都是多线程的,因此它们可以处理在后台执行的多 ...

  8. mysql decimal型转化为float_5分钟搞懂MySQL数据类型之数值型DECIMAL类型

    速成指南 5分钟搞懂MySQL数据类型 之数值型--DECIMAL类型 DECIMAL类型的语法:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL].其中M指定的是数字的总位 ...

  9. 彻底搞懂 JS 中 this 机制

    彻底搞懂 JS 中 this 机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 目录 this 是什么 this 的四种绑定规 ...

最新文章

  1. 将MPM雪模拟移植到Maya
  2. 怎么把原来的墙拆掉_电视墙避坑指南要收好!拆掉重装太心累...
  3. linux中挂载系统光盘,linux下挂载光盘
  4. linux 共享内存_什么是物理/虚拟/共享内存——Linux内存管理小结一
  5. VTK:Video之OggTheora
  6. 数组 边界 检查的几种实现方法
  7. SSM整合——实现图书的查询功能
  8. Oracle数据库一致性读的原理
  9. 阿里字节面试题,多线程打印程序
  10. 抖音短视频内容理解和推荐算法
  11. 【JavaScript】【ChormeDav】问卷星自动填写问卷
  12. MySQL-快速入门(17)MySQL Proxy,读写分离,负载均衡
  13. ABAQUS子程序技术文档-UEL
  14. 近期工作中的错误总结
  15. 融创年报再获佳绩,“地产+”业务快速崛起,融创天花板在哪里?
  16. 如何添加RichFaces 3.3.x到Maven项目
  17. 智慧交通:地铁站 3D 可视化,车路协同赋能科学出行
  18. Context Contrasted Feature and Gated Multi-scale Aggregation for Scene Segmentation
  19. 酒店WiFi覆盖工程
  20. 屏幕测试软件当贝,2018三款智能电视屏幕检测软件,当贝市场良心推荐

热门文章

  1. MLW模型的matlab实现(已修复)
  2. poi 设置单元格边框
  3. RankNet——基本思想
  4. 关于TF转换信息(Transforms)的理解
  5. PhD Debate-6 预告|深度推荐系统的探索与实践
  6. 最具影响力的十大扫地机器人品牌
  7. 三周第一次课(4月2日)
  8. 3.OSPF的协议报文和链路状态通告
  9. 怎样删除数组中重复元素
  10. SY7065A 内置5A MOS大电流同步升压芯片