Js事件循环机制EventLoop

2023-11-09

Js事件循环机制EventLoop

js特点为单线程、但通过事件循环机制配合回调函数实现异步多线程的效果

事件循环机制三个关键

调用栈: 执行主线程代码

消息队列:执行fetch、setTimeout、setInterval的异步代码

微任务队列:执行promise、async、await的异步代码

宏任务与微任务:

宏任务:(macro)task,由宿主发起、可以理解是每次调用栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)。

宏任务包含:

script(整体代码)
setTimeout
setInterval
I/O
UI交互事件
postMessage
MessageChannel
setImmediate(Node.js 环境)

微任务:由JavaScript自身发起的任务、可以理解是在当前宏任务执行结束后立即执行的任务

微任务包含:

Promise.then
Object.observe
MutationObserver
process.nextTick(Node.js 环境)

执行顺序:

1、调用栈(宏任务执行)

2、微任务队列(调用栈加入的微任务会立马执行、但其异步操作会在微任务队列中、待调用栈清空后执行)

3、消息队列(待调用栈、微任务队列清空执行)

代码测试

    
	let p = new Promise(resolve => {// 此处为 调用栈加入的微任务会立马执行
        console.log(4) // 此处会立马执行
        resolve(5) // 此处会立马执行、但此处异步操作会放入微任务队列、待调用栈清空执行
    })
    function  f1() {
        console.log(1) 
    }
    function f2() {
        setTimeout(()=>{
            console.log(2)// 处异步操作会放入消息队列、待调用栈清空执行
        },0)
        f1()
        console.log(3)
        p.then(result =>{ 
            console.log(result)
        })
    }
    f2()

答案

4 1 3 5 2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Js事件循环机制EventLoop 的相关文章

  • 为什么 Internet Explorer 不喜欢这个 jQuery?

    在调试一些在 IE 中不起作用的 jQuery 时 我发现了以下错误消息 var item item itemArray itemIndex find a text trim Object doesn t support this prop
  • 如何使用 Node.js 在 Firebase 中注册用户?

    PROBLEM 0 用户是在 Firebase 的身份验证系统中创建的 我在 身份验证 选项卡中看到它 1 但没有对数据库进行任何更改 2 页面似乎无限加载 3 控制台仅记录 Started 1 CODE router post regis
  • 将变换值添加到元素上已有的当前变换中?

    假设我有一个div那有translateX and translateY动态添加的值 div class object child0 style width 50px height 50px 我想添加rotateY 20deg 到当前的变换
  • 如何使用 JqGrid 子网格进行内联编辑?

    我知道如何使用主网格进行内联编辑 但是有没有办法对子网格进行内联编辑 这是我的 JS 文件 function var lastsel list jqGrid url example php postData q 1 datatype jso
  • 这个特定的 ReactJs 代码是如何执行的初学者问题?

    我是初学者 正在阅读大量代码 现在我想知道下面的代码我明白这段代码在做什么 我需要澄清的是代码流程 当我运行它时 我看到图像正在加载 React 是从上到下执行代码吗 占位符图像异步获得正确的图像 但会App如果需要时间 组件会开始渲染但没
  • 一个文本区域中的文本应复制到另一个文本区域,并且应使用 JavaScript 单击按钮清除原始文本区域

    我已经完成了以下代码 它显示两个文本区域 其中一个文本区域中的文本通过使用 javascript 单击按钮复制到另一个文本区域
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • IE 9 的子元素不透明,我无法使用 captify 阻止它

    好的 我正在使用一段名为 Captify 的 javascript 它为您的图像添加了一个带有文本的小弹出窗口 适用于所有接受 IE9 的浏览器 IE9 会淡化弹出 div 中的所有内容 我已阅读其子元素问题 但无法修复它 由于在网上任何地
  • HTML5 拖放 - 没有透明度?

    当我将一个元素拖放到页面上时 该元素会变成 幻影 基本上它获得了一些透明度值 有什么办法可以做到吗opacity 1 看来是做不到了 拖动的元素被放入具有自己的不透明度 低于 1 的容器中 这意味着虽然您可以降低拖动元素的不透明度 但您无法
  • Node.js 和 Express:异步操作后如何返回响应

    我是 Node js 新手 所以我仍然对异步函数和回调很感兴趣 我现在的难题是如何在异步操作中从文件读取数据后返回响应 我的理解是发送回复的工作方式如下 这对我有用 app get search function req res res s
  • 日期时间的自定义 JavaScriptConverter?

    我有一个对象 它有一个 DateTime 属性 我想通过 AJAX JSON 将该对象从 ashx 处理程序传递回网页 我不想使用第 3 方控件 当我这样做时 new JavaScriptSerializer Serialize DateT
  • Firefox OS 后台服务

    我想构建一个应用程序 用户可以通过它输入一些设置 并且应用程序将启动后台服务来根据这些设置执行一些任务 我只想在模拟器中运行应用程序和后台服务 我知道它需要 认证 模式才能运行后台服务 但我现在不考虑在 Firefox Marketplac
  • Typeahead.js 干扰 Bootstrap 输入组

    如何防止 Typeahead js 拆分我的 Twitter Bootstrap 3 输入组 每当我将 Typeahead javascript 指向属于输入组一部分的文本区域时 连接的文本区域和提交按钮就会停止连接 这只是 Typeahe
  • HTML if 语句在 CDN 失败时加载本地 JS/CSS

    当从 CDN 或任何外部服务器加载 CSS JS 文件时 有可能 即使概率很低 由于外部故障而丢失该文件 在这种情况下 html 页面将因缺乏适当的 CSS 和 JS 而被损坏 有没有一种实用的方法可以在 CDN 故障时加载本地版本 IF
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 如何在 svelte 中制作搜索过滤器

    我有两个组件在组件树中距离很远 我对如何在两者之间进行通信存有疑问 我有搜索组件 listItems 和商店 商店 svelte
  • 在javascript中定义Date.parse的格式[重复]

    这个问题在这里已经有答案了 我正在使用 Date parse 将字符串转换为 JavaScript 中的日期 但是 如果字符串看起来像 10 11 2016 它会被解释为 2016 年 10 月 11 日 我需要将其解释为 2016 年 1
  • 如何修复 AJAX 在选中复选框时始终触发?

    有时这个 AJAX 会触发 有时不会 让我解释一下 habit js document ready function habit check change function habit this parent siblings habit
  • 条件顺序仅在 init AngularJS 上执行

    如何在视图初始化时仅运行 orderBy 过滤器一次 我不希望我的列表在运行时被重新排序 li li 使用 orderBy 作为控制器中的过滤器 app controller DemoCtrl scope filter function s
  • 使用 Promise 语法编写同步代码有什么好处吗?

    有同步承诺这样的概念吗 使用 Promise 语法编写同步代码有什么好处吗 try foo bar a b bam catch e handleError e 可以写成类似的东西 但使用同步版本then foo then bar bind

随机推荐

  • App隐私合规注意事项和相关材料

    合规条文相关资料 最新 移动互联网应用程序信息服务管理规定 2022年8月1日起施行 http www cac gov cn 2022 06 14 c 1656821626455324 htm 全国APP技术检测平台 APP公共服务系统 h
  • 【HarmonyOS】详解低代码端云一体化开发之数据模型

    关键字 元服务 低代码平台 端云一体化开发 数据模型 拖拽式UI 1 写在前面 上一篇中分享了关于低代码平台开发元服务的基本使用 有兴趣的可以看一下 文章地址如下 华为开发者论坛 但是在上一篇中我们的数据都是在端侧配置的 这种方式肯定是无法
  • IDEA 快捷键大全

    目录 一 文本编辑 二 光标操作 三 文本选择 四 代码折叠 五 辅助编码 六 上下文导航 七 查找操作 八 符号导航 九 代码分析 十 运行和调试 十一 代码重构 一 文本编辑 Ctrl Shift V 从历史选择粘贴 Ctrl D 复制
  • Java多线程实现的四种方式

    多线程实现的四种方式 1 继承Thread类 重写run方法 2 实现Runnable接口 重写run方法 实现Runnable接口的实现类的实例对象作为Thread构造函数的target 3 通过Callable和FutureTask创建
  • mbind: Operation not permitted

    问题描述 IntelliJ IDEA 中 Docker Integration 插件 启动 MySql 容器 然后使用 Navicat for MySQL 来连接 只要连接数据库就会出现 mbind Operation not permit
  • java 性能监控 jstack 线程死锁 JConsole 和 BTrace 图形化工具

    java 性能监控 工具 除了 javac java javap 之外 jdk 安装包还提供了很多其他工具 列出 bin 目录下的文件 TomChens MacBook Pro Commands tomchen ls appletviewe
  • 挖坑指南:npm install命令各参数的区别(--sava --save-dev -g)

    前言 在前端工作中 npm已经成为必不可少的一部分 npm install可以为我们的项目安装依赖 那么这个命令的参数 各代表什么含义呢 开始 我们逐一来看看npm install save dev 安装我们项目开发时的依赖 比如一些插件
  • [Unity][AssetBundle]从AB包中加载Material材质球

    名字为111的AB包中 已经有打包的材质 名字为 test using UnityEditor public AssetBundle ab material public Material m
  • Ubuntu16.04为ROS搭建Qt开发环境

    很早之前就听说了Qt有ROS插件可以使用 只是阴 lan 差 de 阳 qu 错 gao 一直到今天还是在使用纯文本的方式在开发ROS 上午心 shou 血 bu 来 liao 潮 le 走上了Qt ros qtc plugin的不归路 所
  • 【华为机试真题Python】字符串消消乐游戏

    目录 题目描述 测试用例 参考代码 题目描述 输入一个只包含英文字母的字符串 字符串中的两个字母如果相邻且相同 就可以消除 在字符串上反复执行消除的动作 直到无法继续消除为止 此时游戏结束 输出最终消除完后留下的字符串 测试用例 用例1 输
  • 网络编程学习笔记

    网络基础 协议的概念 什么是协议 从应用的角度出发 协议可理解为 规则 是数据传输和数据的解释的规则 假设 A B双方欲传输文件 规定 第一次 传输文件名 接收方接收到文件名 应答OK给传输方 第二次 发送文件的尺寸 接收方接收到该数据再次
  • 编写 golang 命令行小工具

    1 前言 把想了很久的命令行小工具写了个demo 前几天看了 7 天仿 gin 项目 于是今天借鉴了其路由匹配方式 写出了这个demo 思路是 创建一个类似路由的map key值为选项 value为选项信息的结构体 结构体中保存有选项的动作
  • Cesium中文教程-3D模型(3D Models)

    目录 3D模型 3D Models 1 快速入门 Quick start 2 动画 Animations 3 各取所需 Picking 4 转化COLLADA为glTF Converting COLLADA to glTF 5 故障排除 T
  • LockSupport源码解析

    一 前言 LockSupport 和 CAS 是Java并发包中很多并发工具控制机制的基础 它们底层其实都是依赖Unsafe实现 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语 LockSupport 提供park 和un
  • c#解决TCP“粘包”问题

    一 TCP粘包产生的原理 1 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包 从接收缓冲区看 后一包数据的头紧接着前一包数据的尾 出现粘包现象的原因是多方面的 它既可能由发送方造成 也可能由接收方造成 2 发送方引起的粘包是由T
  • 【Linux】Linux中Swap与Memory内存简单介绍

    背景介绍 对于Linux来说 其在服务器市场的使用已经占据了绝对的霸主地位 不可动摇 Linux的各种设计思想和使用也被传承 当然不乏各种黑Linux 而且黑的漂亮 Linux的很多独特的设计 对性能也产生了巨大的提升 也为其他应用软件和系
  • 【C51单片机学习笔记----DS18B20温度传感器&&LCD1602液晶屏&&直流电机调速与呼吸灯&&AD模数转换&&红外外部中断】

    文章目录 一 DS18B20温度传感器 1 DS18B20温度传感器连接原理图 2 DS18B20温度传感器单总线通信时序 3 DS18B20温度传感器代码模块 二 LCD1602液晶屏 1 LCD1602液晶屏连接原理图 2 字符码和指令
  • Unity基础篇:Unity中的世界坐标和局部坐标,Transform和Translate等问题的讨论。

    今天感触良多 故于此一记 首先 对于世界坐标和局部坐标 这是两个cube 是我们今天的主角 首先是这个父Cube 我们注意到它此时坐标为 0 0 0 由于他在根目录 所以他的transform position就是他的世界坐标 这里之所以用
  • 前端命名规范以及常用命名整理

    1 基本要求 1 文件编码统一使用 UTF 8 编码 2 命名时以符合语义为主要参考指标 CSS属性书写规范 采用统一风格及命名方法 3 结构清晰 层级关系明朗 以不超过三级为标准 4 同一表现形式的样式要求可重复利用 模块组件类的样式要求
  • Js事件循环机制EventLoop

    Js事件循环机制EventLoop js特点为单线程 但通过事件循环机制配合回调函数实现异步多线程的效果 事件循环机制三个关键 调用栈 执行主线程代码 消息队列 执行fetch setTimeout setInterval的异步代码 微任务