前端笔记(4)JavaScript宏观与微观任务

2023-11-06

宏观和微观任务

在 ES3 和更早的版本中,JavaScript 本身还没有异步执行代码的能力,这也就意味着,宿主环境传递给 JavaScript 引擎一段代码,引擎就把代码直接顺次执行了,这个任务也就是宿主发起的任务。

但是,在 ES5 之后,JavaScript 引入了 Promise,这样,不需要浏览器的安排,JavaScript 引擎本身也可以发起任务了。

由于我们这里主要讲 JavaScript 语言,那么采纳 JSC 引擎的术语,我们把宿主发起的任务称为宏观任务,把 JavaScript 引擎发起的任务称为微观任务。

宏观任务的队列就相当于事件循环。在宏观任务中,JavaScript 的 Promise 还会产生异步代码,JavaScript 必须保证这些异步代码在一个宏观任务中完成,因此,每个宏观任务中又包含了一个微观任务队列。

有了宏观任务和微观任务机制,我们就可以实现 JavaScript 引擎级和宿主级的任务了,例如:Promise 永远在队列尾部添加微观任务。setTimeout 等宿主 API,则会添加宏观任务。

如何分析异步执行的顺序

  1. 首先我们分析有多少个宏任务;
  2. 在每个宏任务中,分析有多少个微任务;
  3. 根据调用次序,确定宏任务中的微任务执行次序;
  4. 根据宏任务的触发规则和调用次序,确定宏任务的执行次序;
  5. 确定整个顺序。
setTimeout(()=>{console.log('c')},0)
let x = new Promise((resolve,reject)=>{
	console.log('a')
	resolve()
}).then(res=>{
	console.log('b')
	setTimeout(()=>{console.log('d')},0)
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端笔记(4)JavaScript宏观与微观任务 的相关文章

随机推荐

  • temu的使用

    temu对进程的分析是建立在虚拟机上的 temu工具依赖于qemu qemu是模拟处理器 安装temu时qemu就已经安装好了 使用temu时 首先要制作一个映像 然后通过temu启动该映像进入虚拟机 需要注意的是 如果你在实际ubuntu
  • android 首页图标

  • 绘制单个条形图与多个条形图

    绘制单个条形图 案例 假设你获取到了某年内地电影票房前20的电影 列表a 和电影票房数据 列表b 那么如何更加直观的展示该数据 a 战狼2 速度与激情8 功夫瑜伽 西游伏妖篇 变形金刚5 最后的骑士 摔跤吧 爸爸 加勒比海盗5 死无对证 金
  • 使用JavaMail发送邮件时嵌入公司logo图片

    使用JavaMail发送邮件时嵌入公司logo图片 第一种方式 img 标签和 logo 图片链接 第二种方式 使用 img 标签和图片 base64 字符串 第三种方式 推荐 将 logo 当做附件一起发送并设置 ContentID 再使
  • [1120]Maven依赖冲突解决之exclusions

    1 背景 1 作为java生态下开发者 往往需要使用大量线程的第三方库 一般都是以jar包形式存在 2 maven作为事实上主流的jar包依赖管理工具 Idea和Eclipse都支持创建maven工程来管理jar包依赖 3 使用maven进
  • C语言实现原码补码输出

    今天复习了一下C中的原码补码的知识 顺便编程使用for while do while goto recursive 实现了补码和原码的输出 核心思想 借助一个字符串数组 将得到的原码和补码存储到相应数组中去 在计算原码的时候 由于存在负数的
  • 单片机C语言基础

    目录 前言 一 C语言基础 1 1 逻辑运算 1 2 字长定义 1 3 布尔型变量 1 4 符号 1 5 位段 1 6 typedef关键字 1 7 volatile关键字 二 代码规则 前言 介绍一下单片机开发的C语言使用 个人会慢慢完善
  • 第四次 python

    元组练习题 tup nihao wohao dajiahao a 计算元组长度并输出 b 获取元组第2个元素并输出 c 获取元素第2 3个元素并输出 d 使用for循环遍历输出元组 e 使用for len range输出元组的索引 f 将元
  • JAVA实现用户输出正整数重复出现的次数并打印(最大数字不超过10)

    package day1 实现用户输出正整数重复出现的次数并打印 public class TestSameNum public static void main String args int arr 1 2 3 4 5 6 7 1 2
  • vue使用动态样式与计算属性实现多变量判断

    一 动态class绑定 代码 class的计算属性着重于减少页面内含大量逻辑判断导致代码阅读性差
  • 垃圾分类图片数据集分享-约10w张数据集

    1 获取方式 点赞本博客 评论区留邮箱 博主在会发送 私信博主 访问的人太多了 需要私信联系 截至到2021 03 30评论区所有邮箱已无偿发送 图片数据集直接留邮箱即可 2 问题描述 最近在做一个相关项目 从网上整理了许许多多的有关于垃圾
  • 多维时序

    多维时序 MATLAB实现DNN深度神经网络多变量时间序列预测 考虑历史特征的影响 多指标 多图输出 目录 多维时序 MATLAB实现DNN深度神经网络多变量时间序列预测 考虑历史特征的影响 多指标 多图输出 预测效果 基本介绍 模型结构
  • .Net Core with 微服务 - 架构图

    上一次我们简单介绍了什么是微服务 NET Core with 微服务 什么是微服务 介绍了微服务的来龙去脉 一些基础性的概念 有大佬在评论区指出说这根本不是微服务 由于本人的能力有限 大概也只能理解到这个层次 先不管它到底是不是微服务吧 既
  • 「五度易链」助力园区招商,引优质企业 精准甄别 全程管理,促产业高质发展

    近年 无数产业园区已迈入数字化转型阶段 大数据招商被深度应用 缺乏招商线索的局面已一去不返 但面对鳞萃比栉 纷繁芜杂的各种招商标的信息 又是让园区招商工作者眼花缭乱 举棋不定 难以抉择 那么该如何进行项目甄别 判断企业落地价值呢 五度易链
  • 快手短视频微信小程序端自动下单工具

    快手小店微信小程序虽然关闭了 但是还有个快手短视频 其实就是快手小店的产品 在直播售卖 抓包短视频直播下单 根据小程序端下单 写个自动下单工具 众所周知 快手CK 很长时间都有效 打开软件 打开PC微信 快手短视频小程序 进入直播 随便找一
  • Wolfram Mathematica 安装与使用

    1 Wolfram Mathematica 9 安装 各大网站几乎都有Wolfram Mathematica 9学习软件 大学 高等数学 里面涉及的的函数图形几乎都可以使用GeoGebra 5来做图 GeoGebra的功能十分强大 而且是免
  • Centos 8二进制安装Mysql-8.0.23

    1 mysql tar包的下载 下载官网 https downloads mysql com archives community 2 解压 root cent8 yzil tar xf mysql 8 0 23 linux glibc2
  • 基于NB-IoT物联网智能运维箱整体解决方案

    一 方案背景 雪亮工程 智慧交通 水利监控 环保监控等系统大多安装于户外 设备量级大 分布广 易受到恶劣环境和人为破坏等因素影响 导致系统故障率高 可用性差 传统人工维保存在维护成本高 效率低的问题 难以保证设备的高在线率 在物联网 边缘计
  • 代码行数统计小工具

    一 先下载好SourceCounter小工具 解压 然后直接打开文件夹中的SourceCounter exe 如果没有找到此工具的下载链接 点这里下载 二 选择代码类型 勾选上所有类型 三 双击点开后 选择文件夹 就可以直接统计出字数了
  • 前端笔记(4)JavaScript宏观与微观任务

    宏观和微观任务 在 ES3 和更早的版本中 JavaScript 本身还没有异步执行代码的能力 这也就意味着 宿主环境传递给 JavaScript 引擎一段代码 引擎就把代码直接顺次执行了 这个任务也就是宿主发起的任务 但是 在 ES5 之