在介绍宏任务和微任务之前,先抛出一个问题。相信大家在面试的时候,会遇到这样的相似的问题:

setTimeout(function(){undefined

console.log(‘1’)

});

new Promise(function(resolve){undefined

console.log(‘2’);

resolve();

}).then(function(){undefined

console.log(‘3’)

});

console.log(‘4’);

请说出控制台打印的数据,很多小伙伴经过深思熟虑之后,会自信的说出答案:2、4、1、3。

但是说出答案之后往往会发现面试官并没有出现很满意的表情。这是为什么呢?接下来让我们一步一步的探讨面试官不满意的原因。
JavaScript事件循环机制

首先还是说说JavaScript的事件循环机制,大家都知道,js的执行任务分为同步任务和异步任务,那么他们的执行情况是怎么样的尼?执行的时候,会优先执行同步任务,当执行中遇到了异步任务,会暂时将异步任务扔到异步队列中,继续执行后面的同步任务。当所有的同步任务执行完成之后,再执行刚才扔在异步队列中的任务。一直循环执行,也就形成了我们JavaScript的Event Loop机制。

可能纯文字的介绍大家看得有点绕,下面引入一张图片来帮助大家理解JavaScript事件循环机制:
在这里插入图片描述

看完这个图,各位小伙伴可能会觉得,我上面的答案没有问题呀,是正确的呀!但是事情并不是那么的简单,接下来引入两个新概念:宏任务(macrotask)和微任务(microtask)
宏任务(macrotask)和微任务(microtask)

宏任务和微任务表示的是异步任务的两种分类。在浏览器js引擎加载js代码的时候,会将所有的代码以任务的形式分别分配到这两个分类的队列中。然后首先会从宏任务的任务队列中中取出一条任务执行;当执行完毕之后再将微任务队列里面的所有的任务按照顺序执行;当所有的微任务队列任务执行完毕之后,再去宏任务队列中取出一条任务执行。

宏任务主要有:整体script代码、setTimeout、setInterval、I/O、requestAnimationFrame
微任务主要有:Promise、process.nextTick、MutationObserver

那么宏任务和微任务到底是什么关系呢?接下来,奉上一张宝图,描述两者的关系:

更多内容请见原文,文章转载自:https://blog.csdn.net/weixin_44519496/article/details/118514987

Event Loop我知道,宏任务微任务是什么鬼?的更多相关文章

  1. 我所理解的event loop

    灵魂三问 JS为什么是单线程的 我们都知道,JS是单线程的语言,那为什么呢?我的理解是JS设计之初就是为了在浏览器端完成DOM操作和一些简单交互的,既然涉及到DOM操作如果是多线程就会带来复杂的同步问 ...

  2. event loop、进程和线程、任务队列

    本文原链接:https://cloud.tencent.com/developer/article/1106531 https://cloud.tencent.com/developer/articl ...

  3. 【JS档案揭秘】第二集 Event loop与执行栈

    我时常在思考关于JS的很多知识在工作中有什么用?是否只能存在于面试这种理论性的东西中,对于我们的业务和工作,它们又能扮演怎样的角色.以后在JS档案揭秘的每一期里,都会加入我对于业务的思考,让这些知识不 ...

  4. 浏览器中的 Event Loop

    当我们执行 JS 代码的时候其实就是往执行栈中放入函数,那么遇到异步代码的时候该怎么办?其实当遇到异步的代码时,会被挂起并在需要执行的时候加入到 Task(有多种 Task) 队列中.一旦执行栈为空, ...

  5. js的事件循环(Event Loop)

    (本文从掘金小册整理) 首先介绍一下几个概念 进程与线程 相信大家经常会听到 JS 是单线程执行的,但是你是否疑惑过什么是线程? 讲到线程,那么肯定也得说一下进程.本质上来说,两个名词都是 CPU 工 ...

  6. NodeJs的Event Loop

    我们之前谈过浏览器的Event Loop:https://www.cnblogs.com/amiezhang/p/11349450.html 简单来说,就是每执行一个宏任务,就去执行微任务队列,直到清 ...

  7. Event Loop 是什么?

    Event Loop 是什么? 本文写于 2020 年 12 月 6 日 广义上来说 Event Loop 并不是 JavaScript 独有的概念,他是一个计算机的通用概念. 狭义上来说,只有 No ...

  8. JavaScipt 中的事件循环(event loop),以及微任务 和宏任务的概念

    说事件循环(event loop)之前先要搞清楚几个问题. 1. js为什么是单线程的? 试想一下,如果js不是单线程的,同时有两个方法作用dom,一个删除,一个修改,那么这时候浏览器该听谁的?   ...

  9. JavaScript Event Loop和微任务、宏任务

    为什么JavaScript是单线程? JavaScript的一大特点就是单线程, 同一时间只能做一件事情,主要和它的用途有关, JavaScript主要是控制和用户的交互以及操作DOM.注定它是单线程 ...

随机推荐

  1. 基于STM32单片机的简单红外循迹的实现

    初步接触STM32,采用两路红外传感器实现小车循迹,稍显简略,如有不好的地方,欢迎大家指点改正

  2. Zabbix6 网络发现

    Zabbix6 网络发现 功能 快速发现并添加主机 简单的管理 随着环境的改变而快速搭建系统 发现配置依据 IP地址段 基于服务(FTP.SSH.Web.POP3.IMAP.TCP-)的 从Zabbi ...

  3. 基于 Apache Hudi 构建增量和无限回放事件流的 OLAP 平台

    1. 摘要 在本博客中,我们将讨论在构建流数据平台时如何利用 Hudi 的两个最令人难以置信的能力. 增量消费--每 30 分钟处理一次数据,并在我们的组织内构建每小时级别的OLAP平台 事件流的无限 ...

  4. JavaWeb学习第一阶段结束

    模仿狂神实现简单的用户增删改查,增加了前端登录时的密码验证 JavaWeb学习第一阶段结束,相较于第一阶段的一味学习,第二阶段想拿出更多的时间来阅读别人的源码以及跟着做简单的小项目,同时进一步深入学习 ...

  5. 2021.08.05 P5357 康托展开模板(康托展开)

    2021.08.05 P5357 康托展开模板(康托展开) P5367 [模板]康托展开 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.康托展开 算法学习笔记(56): ...

  6. 2021.07.26 P1022 计算器的改良(字符串)

    2021.07.26 P1022 计算器的改良(字符串) 改进: 如果是我出题,我一定把未知数设为ab.buh.bluesky之类的长度不只是1的字符串! 题意: 一个一元一次方程,求解. 分析: 1 ...

  7. 20202127 实验一《Python程序设计》实验报告

    20202127 2022-2022-2 <Python程序设计>实验一报告课程:<Python程序设计>班级: 2021姓名: 马艺洲学号:20202127实验教师:王志强实 ...

  8. 【学习笔记】CDQ分治(等待填坑)

    因为我对CDQ分治理解不深,所以这篇博客只是我现在的浅显理解有任何不对的,希望大佬指出. 首先就是CDQ分治适用的题型: (1)带修改,但修改互相独立 (2)必须允许离线 (3)解决数据结构的题,能把 ...

  9. 基于Koa与umi实现服务端(SSR)渲染

    工具: umijs:react前端应用框架. koa:基于 Node.js 平台的web 开发框架. 介绍: 本文主要是简单介绍,利用umi开发前端页面,打包成服务端渲染工程包.由Koa实现服务端渲染 ...

  10. 精华!一张图进阶 RocketMQ

    前 言 大家好,我是三此君,一个在自我救赎之路上的非典型程序员. "一张图"系列旨在通过"一张图"系统性的解析一个板块的知识点: 三此君向来不喜欢零零散散的知识 ...