JavaScript的事件循环机制

1.事件循环的理解

JavaScript是单线程的,意味着它一次只能执行一个任务。而事件循环就是去协调在JavaScript环境中运行的同步任务、异步任务(微任务、宏任务)的执行顺序的一种机制。它是 JavaScript 实现单线程非阻塞异步执行的核心。

2.事件循环的执行顺序

同步任务——>所有微任务——>一个宏任务——>清空微任务队列——>一个宏任务.......。每执行完一个宏任务后,再次检查并执行所有微任务,然后再执行一个宏任务,这就是事件循环。

宏任务:指的是最普通的异步工作,如:setTimeout、setInterval、整段 script、I/O 回调(网络请求、文件读写等)。事件循环每轮只从宏任务队列里取一个执行。

微任务:包括Promise.then、queueMicrotask、MutationObserver(以及 Node 里的 process.nextTick)。微任务在当前宏任务执行完后立马执行

代码示例:执行顺序(A->D->C->B)

console.log('A');setTimeout(() => console.log('B'), 0);  // 宏任务Promise.resolve().then(() => console.log('C'));  // 微任务console.log('D');

3.扩展

对于添加async和await语法糖来说,async会将异步函数 ‘变为’ 同步函数,而await会等待Promise返回的结果后,才会执行await下面的语句,也就是说await把后面的语句注册为为微任务,而await前面的任务为同步任务

代码示例:执行顺序(1->2->3->4->5->6->7)

console.log('1. 同步代码开始');async function foo() {console.log('2. foo 函数体执行(同步)');await bar();          // await 后面那一行是微任务console.log('5. await 后面是微任务,此时 bar 已返回');
}function bar() {console.log('3. bar 执行(同步)');return Promise.resolve();  // 返回一个已决的 Promise
}foo().then(() => {console.log('6. foo 返回的 Promise resolve(微任务)');
});setTimeout(() => {console.log('7. setTimeout 回调(宏任务)');
}, 0);console.log('4. 同步代码结束');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96123.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——栈(Java)

目录 一定义. 入栈 出栈 二.栈与线性表的关系 三.栈的实现方式 四.链表实现栈 1.结点的API设计 2.栈的API设计 2.1栈的初始化设计 2.2元素入栈 2.3元素出栈 五.括号匹配问题 完整代码展示 答案 一定义. 栈是一种基于先进后出(FILO)的数据…

科研笔记:数学建模启发的课题研究方法

借鉴数学建模的思路解决科学问题或开展课题研究,核心是将实际问题抽象为数学框架,通过定量分析、逻辑推演和验证优化,实现对问题的精准描述、解释或预测。其本质是“从现实到数学,再从数学回归现实”的迭代过程,适用于…

Agent落地到底选择LangChain 还是 LangGraph

核心概念 LangChain:一个用于构建由大型语言模型驱动的应用程序的框架。它提供了大量的组件和现成的链,旨在简化和标准化应用程序与LLM交互的过程。 LangGraph:一个用于在LangChain之上构建有状态、多参与者的 工作流 的库。它特别擅长处理具有循环、分支和复杂协调的代理(…

ChatGPT下的相关聊天提示词

问:如果我觉得一个子对话里,聊天聊得太多,在这个项目下新开一个子对话,但是不想把上次太多的信息 都复制过来,有没有什么办法关键词:项目、子对话,上下文ChatGPT:有办法的 ✅在 ChatGPT 里&…

最新PDF版本!Acrobat Pro DC 2025,解压即用版

软件介绍 Adobe Acrobat Pro DC 2025 是全球知名的 PDF 编辑神器,被称为 “最牛 PDF 工具”,能轻松解决 PDF 编辑、创建、转换等难题,本次分享的版本解压即可使用。 软件特点 然解压即可使用不用登录注册最新版本 软件使用 我们打开软件选…

XX汽集团数字化转型:全生命周期网络安全、数据合规与AI工业物联网融合实践

引言:数字化转型中的安全与效率双轮驱动作为中国汽车行业的龙头企业,XX汽集团近年来积极推进数字化转型,通过构建全生命周期网络安全体系、完善数据合规治理框架,并深度融合AI工业物联网技术,实现了生产成本显著降低和…

云原生部署_Docker入门

Docker是啥Docker是一个开源的容器化平台,可以帮助开发者将应用程序和其依赖的环境打包成一个可移植、可部署的容器。Docker的主要目标是通过容器化技术,实现应用程序的快速部署、可移植性和可扩展性,从而简化应用程序的开发、测试和部署过程…

【大数据专栏】大数据框架-Apache Druid Overview

目录 Architecture Advantages and disadvantages 从架构以及设计可以得出结论,Durid不支持ACID事务,基于时间戳列和维度列去查询,所以适合基于时间做分组和学列的查询操作。 Advantages优势: 实时数据摄取与查询 支持秒级数据摄…

云平台面试内容(一)

1. 云计算的优点、服务模型区别及云部署模式 云计算优点: 云计算具有显著的优势,包括无需自建机房和硬件投入,资源即开即用并支持弹性伸缩,按需付费使成本透明可控。企业可以在数分钟内完成全球范围的部署,缩短上线周期。同时云平台提供高可用性和安全性,多副本容灾保证数…

嵌入式 - 硬件:51单片机(2)

本节重点:1. GPIO输入模式、输出模式2. 按键工作原理(GPIO输入)3. 中断概念4. 中断源概念、中断源个数、哪几个中断源5. 外部中断、定时器中断概念6. 中断处理流程:7. 51单片机中定时器的个数?类型8. 16位定时器和8位…

C语言中奇技淫巧07-使用GCC栈保护选项检测程序栈溢出

-fstack-protector 是 GCC 和 Clang 编译器提供的一种栈保护(Stack Smashing Protection, SSP) 机制,用于检测和防御常见的缓冲区溢出攻击(特别是栈溢出)。它通过在函数的栈帧中插入特殊的“金丝雀值”(can…

.NET 8.0 Web API JWT 身份验证和基于角色的授权

在当今的数字环境中,保护 Web 应用程序的安全至关重要。随着 .NET 8.0 的不断发展,它提供了强大的工具来确保您的 API 既安全又高效。 示例代码:https://download.csdn.net/download/hefeng_aspnet/91490262 如果您喜欢此文章&#xff0c…

ZYNQ SDK软件在线调试

1、然后右键项目->debug as->launch on hardware2、从左到右分别是:运行程序到设置的断点暂停运行终止断开连接步进(进入函数内部)跳过(不进入函数内部)跳出函数3、双击添加断点,然后点击运行可以让程…

四大金刚之计算机操作系统

1. 进程和线程的区别?创建线程的代价比创建进程小吗?进程是资源分配和调度的基本单位;线程是 CPU 调度的基本单位。进程有独立的地址空间,线程共享进程地址空间。创建/销毁进程开销大,线程开销小。是的,因为…

redis--redis.conf的相关配置问题

关于redis.conf内的相关重要的配置介绍 1. bind 配置 仅仅设置bind,还需要搭配下面的rotected-mode 配置才能外部ip进行连接 功能:设置 Redis 监听的 IP 地址,决定哪些设备可以连接到 Redis 服务器。 bind 127.0.0.1:只允许本机&a…

unsloth 笔记:从最近的检查点继续微调

检查点(checkpointing)可以把微调进度保存下来,这样可以中途暂停,随后继续训练。首先需要在 Trainer 的参数里添加 save_strategy 和 save_steps。trainer SFTTrainer(....args TrainingArguments(....output_dir "output…

DevOps平台选型指南:破解研发效率瓶颈,适配金融/政务/国产化场景的5大关键指标

在数字化转型的浪潮中,软件研发效能已成为企业的核心竞争力。然而,许多团队在追求敏捷与高速交付的过程中,常常会遇到工具链割裂、流程冗长、环境混乱等效率瓶颈。选择一个合适的、一体化的DevOps平台,是破解这些瓶颈、实现研发运…

【面试向】元宇宙介绍

属于基础知识介绍,主要目的是对这一概念有技术层面的理解,有前瞻性的观点,帮助大家在面试中给出得体的表述。 1. 什么是元宇宙? 元宇宙本质上是一个融合了数字与现实、由技术构建的 “沉浸式虚拟空间”,是一个 “超越…

FreeMarker快速入门指南

FreeMarker快速入门指南 FreeMarker是一个基于模板和数据模型生成文本输出的Java库。它广泛应用于Web开发、代码生成、邮件模板等场景。本文将带你快速上手FreeMarker的核心概念和基本用法。 什么是FreeMarker FreeMarker是一个模板引擎,它将模板文件(.f…

Nginx主配置文件

一,Nginx基本介绍1,nginx概念Nginx 是一款轻量级、高性能的服务器软件,核心能力是 “处理网络请求”,被广泛用于网站、App 的后端架构中。Nginx 就像一个 “高效的网络交通指挥官”,核心价值是用最少的资源&#xff0c…