【JS进阶】JS的事件循环机制

微任务与宏任务的事件循环机制 事件循环(Event Loop)是 JavaScript 中一个非常核心的机制,它决定了代码是如何执行的,特别是在处理异步操作时,比如 setTimeout、Promise、async/await 等。下面我们来 详细 讲解一下宏任务(Macro Task)与微任务(Micro Task)的事件循环机制。 阅读详情

JS事件循环机制

1.JS的运行机制

JavaScript是一门单线程语言,单线程意味着在一个时间点内只能做一件事,因此JS引擎就会有多余的时间,所以为了解决单线程所造成的这个问题,提出了同步和异步的执行模式。

1.1 同步(阻塞)

同步执行模式就是JS会严格按照原本单线程逻辑,从上到下,从左到右的执行代码逻辑。

1.2 异步(非阻塞)

在执行JS代码时先逐步执行同步代码,遇到异步代码先将异步代码放到任务队列中,直到同步代码执行完毕才执行异步代码。

2.同步任务与异步任务

2.1 同步任务

指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。

2.2 异步任务

指不进入主线程、而进入**“任务队列”**的任务,只有等主线程任务全部执行完毕,"任务队列"的任务才会进入主线程执行。

异步任务又可以分为宏任务和微任务。

如下表:
在这里插入图片描述
同时,需要注意的是:

这里的 Promise 是指 Promise 的then、catch方法,而创建 Promise(new Promise()中的内容),console.log()均为同步任务。

3.任务执行过程

在这里插入图片描述
所以实际上的执行顺序为:同步任务 → 微任务 → 宏任务

具体来说,有以下几个步骤:

  1. 先执行所有同步任务,碰到异步任务放到任务队列中
  2. 同步任务执行完毕,开始执行当前所有的异步任务
  3. 先执行任务队列里面所有的微任务
  4. 然后执行一个宏任务
  5. 然后再执行所有的微任务
  6. 再执行一个宏任务,再执行所有的微任务·······依次类推到执行结束。

在这一过程中,第三步到第六步的这个循环,被称为 Event Loop,即事件循环。

事件循环是JavaScript实现异步的一种方法,也是JavaScript的执行机制。

总结

事件循环主要是针对解决宏任务,一次事件循环只能处理一个宏任务,执行宏任务的时候会进行一次轮询,看有没有微任务,如果有微任务将会把微任务执行全部执行完毕,在执行宏任务。

补充1:async/await 的特殊情况

你不知道的JS 包含:JS基础、JS实操。 阅读详情

相关推荐

JavaScript进阶5之垃圾回收(计算机组成、解释与编译、JavaScript引擎、垃圾回收、内存管理)、运行机制(浏览器进程分类、浏览器事件循环)

标记清除(Mark-Sweep),目前在 JavaScript引擎 里这种算法是最常用的,到目前为止的大多数浏览器的 JavaScript引擎 都在采用标记清除算法,各大浏览器厂商还对此算法进行了优化加工,且不同浏览器的 JavaScript引擎 在运行垃圾回收的频率上有所差异。标记清除算法有一个很大的缺点,就是在清除之后,剩余的对象内存位置是不变的,也会导致空闲内存空间是不连续的,出现了 内存碎片(如下图),并且由于剩余空闲内存不是一整块,它是由不同大小内存组成的内存列表。

qq_34306228的博客 1342

高级前端进阶 JavaScript中的事件循环机制

在这里分享一个前端面试题库小程序 MST题宝库 一、简单讲解 这个大家应该或多或少都知道的 for (var i = 0; i < 10; i++) { setTimeout(() => { console.log(i); // 输出10个10 }); } 解析:先执行for循环,循环叠加i,然后再执行setTimeout 10遍,所以会输出10个10变体: for (let i = 0; i < 10; i++) { setTim...

web全栈开发的博客 478

STM32G474实战:数字LLC电源控制程序从零到跑通(附完整代码解析)

本文详细介绍了基于STM32G474微控制器开发数字LLC电源控制程序的完整实战流程。从硬件平台搭建、CubeMX工程配置,到核心控制逻辑、双速率中断框架、数字PID实现,再到Burst模式、状态机等高级策略与异常处理,提供了从零到跑通的系统化指南与代码解析,助力开发者掌握高效数字电源的程序编写与调试技巧。

s1t2u3的博客 1238

Js进阶9-事件循环机制

事件循环机制

晴雪月乔的博客 209

FPGA设计中的扇出约束实战:从XDC到代码优化的全流程解析

本文全面解析FPGA设计中扇出约束的重要性与应用,详细介绍了从XDC约束文件设置到HDL代码优化的全流程实战技巧。通过MAX_FANOUT约束控制信号负载,结合寄存器复制和物理优化策略,有效解决高扇出导致的时序违例和布线拥塞问题,提升设计性能和可靠性。

nept的博客 797

VisionPro九点标定实战:从相机拍照到机器人精准抓取的完整流程

本文详细介绍了VisionPro九点标定技术在工业自动化中的应用,从相机拍照到机器人精准抓取的完整流程。通过硬件配置、标定步骤和实战技巧的解析,帮助工程师实现高精度视觉引导系统,提升生产效率。特别适合需要解决二维图像坐标与物理空间转换问题的自动化项目。

weixin_30664051的博客 406

高级前端进阶 JavaScript中的事件循环机制_前端笔试题 ,javascript事件循环机制,

为了帮助大家更好的了解前端,特别整理了《前端工程师面试手册》电子稿文件。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】i < 10;i++) {// 依次输出0-9});}`我们知道var跟let本质区别就是作用域的问题,所以会联想到let导致的,但在这一点上,并不是作用域问题,因为从事件循环机制来解释是有问题的以上的代码等价于i < 10;i++) {});})(i);// 立即执行函数,以上的let应该是将代码特殊处理了下}`

2401_84434880的博客 924

激光三角测量法:斜射与直射式技术的原理与应用解析

本文深入解析激光三角测量法中斜射式与直射式技术的原理、应用及对比。斜射式适用于高精度小范围测量,尤其擅长处理反光表面;直射式则适合大范围位移检测,结构更简单。文章详细介绍了两种技术的光路分析、数学建模、应用场景及选型建议,并探讨了系统校准与误差分析方法,为工业检测领域提供实用参考。

weixin_29280219的博客 414

(转载)全面梳理JS引擎的运行机制,从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理

此文章全文均为转载: 原文链接:https://juejin.im/post/5a6547d0f265da3e283a1df7 前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正。 ———-超长文+多图预警,需要花费不少时间。———- 如果看完本文后,还对进程线程傻傻分不清,不清楚浏览器多进程、浏览器内核多线程、JS单线程、JS运行机制的区别。那么请回复我,一...

狼丶宇先森的网络科技空间 573

Windows系统监控实战:Grafana+Prometheus+node_exporter配置全攻略

本文提供了一套完整的Windows系统监控解决方案,详细介绍了如何使用Grafana、Prometheus和node_exporter(Windows版为windows_exporter)构建可视化监控平台。从环境准备、组件安装配置,到数据可视化与常见问题排查,手把手指导您实现从数据采集到仪表盘展示的全过程,帮助您从被动救火转向主动预警,有效保障Windows服务器稳定运行。

assembly8low的博客 247

从仿真到真机:如何将XTDrone的VINS-Fusion+RTABMap建图方案部署到真实无人机上?

本文详细介绍了如何将XTDrone的VINS-Fusion+RTABMap建图方案从仿真环境迁移到真实无人机上。内容涵盖硬件选型、传感器配置、VINS-Fusion调优、RTABMap性能优化以及系统集成等关键步骤,特别针对三维稠密重建在真实环境中的挑战提供了实用解决方案。

weixin_29056781的博客 242

【前端面试系列】事件循环机制深度剖析

编写高性能代码解决复杂异步问题优化用户体验都有重要意义。多写demo验证概念关注各种框架的异步实现持续学习新的异步编程模式🙏徐白知识星球📚徐白知识星球我会持续输出高质量的前端技术文章,分享实战经验和技术心得。共同成长欢迎在评论区留言交流有问题随时后台私信定期举办技术分享会更多精彩内容持续更新中…让我们一起在技术的道路上携手前行!💪。

徐白知识星球 1454

机器视觉/将HIK海康面阵相机连接Halcon软件

本文简述了如何将海康面阵相机连接到Halcon软件中进行实时取图的过程。

Dahe.qu 4866

JavaScript事件循环

主要总结事件循环中的运行机制、任务分类、执行顺序、不同环境下的差异,以及调试工具和最佳实践等内容。

热爱前端的大宝同学。 1015

Vue3 - 超详细最新 wangEditor V5 富文本编辑器安装引入及使用教程,提供工具栏配置、基础富文本功能、API使用示例教程等(新手小白快速引入并植入到项目中)

vue3,wangEditorv5富文本编辑器,wangEditorv5官方文档,vue3最新安装wangEditorv5富文本详细使用教程,vue3使用wangEditorv5编辑器示例代码,vue3网站网页安装植入富文本编辑器教程,vue3wangEditor使用api,vue3安装富文本控制台出现报错如何解决,vue3wangEditor-v5工具栏配置,vue3中使用富文本编译器wangEditor5的方法,wangeditor5在vue3中的全使用过程,vue3超详细最新wangedi

🏆 前端领域优质创作者 4253

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理

前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正。 ----------超长文+多图预警,需要花费不少时间。---------- 如果看完本文后,还对进程线程傻傻分不清,不清楚浏览器多进程、浏览器内核多线程、JS单线程、JS运行机制的区别。那么请回复我,一定是我写的还不够清晰,我来改。。。 ----------正文开始---------- 最近发现有不少介绍JS单线...

nicexibeidage的博客 292

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Node.js 面试进阶指南:模块机制、事件循环、性能调优实战答法

摘要:Node.js面试常被问及的模块机制、事件循环和性能调优三大核心问题,往往让开发者陷入"会用不会讲"的困境。本文针对性地解析:1)CommonJS同步加载与ESM异步加载的设计差异;2)Node特有的事件循环六阶段模型(setImmediate比setTimeout快的本质原因);3)内存泄漏排查工具链(DevTools/clinic.js/火焰图)与优化策略。掌握这些底层原理的表述能力,是突破面试瓶颈的关键,建议通过"技术类比+阶段拆解+实战案例"的组合方式提

Anthony1453的博客 588

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JavaScript 进阶

目标:理解闭包、原型链、this、异步与事件循环等核心概念,能应对常见 JS 进阶面试题。

biapang的博客 479

高级前端进阶 JavaScript中的事件循环机制_前端笔试题 ,javascript事件循环机制,(1)

如果你已经下定决心要转行做编程行业,在最开始的时候就要对自己的学习有一个基本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】宏任务:setTimeout跟setInterval微任务:Promise().then() 这里要注意一下,Promise方法里面的是同步任务,then里面的才是微任务。

2401_84434880的博客 388

前端 JavaScript 进阶面试题

这篇文章全面总结了JavaScript前端开发中的核心面试题,涵盖以下关键主题: 异步编程:包括Promise、async/await、回调函数的优缺点及解决方案 原型与继承:原型链机制、继承实现方式及优化方案 作用域与闭包:变量提升、作用域链、闭包原理 事件机制:事件流、冒泡与捕获、事件代理 对象操作:深浅拷贝、对象创建方式、Proxy与Reflect 类型系统:BigInt与Number区别、WeakMap与Map区别 函数特性:this指向、bind/call/apply、尾调用优化 API原理:so

i520_1314的博客 1086

JavaScript进阶-WebAPI(DOM网页特效-BOM操作浏览器)

文章目录二、JavaScript进阶-WebAPIDOM-网页特效常用事件对象属性-位置页面滚动事件和页面加载事件scroll和offset和clientBOM操作浏览器Window对象JS执行机制本地存储 二、JavaScript进阶-WebAPI DOM-网页特效 常用事件对象属性-位置 let img = document.querySelector('img') document.addEventListener('click', function (e) { console.log('clie

ZZP的博客 644

React Native 面试:JS 异步与事件循环核心知识点

`` **缺点**:嵌套深、错误处理难、难以并行 ### 2. Promise ```javascript // 三种状态:pending → fulfilled / rejected(状态不可逆) const promise = new Promise((resolve, reject) => { // 异步操作 setTimeout(() => resolve('成功'), 1000);resolve();

song_1005的专栏 321

终极指南:掌握JavaScript核心技术的10年必看视频资源库

JavaScript作为现代Web开发的基石,其技术演进日新月异。js-must-watch项目精心整理了从2009年到2020年期间最值得观看的JavaScript技术视频资源,为开发者提供了一个系统性的学习路径。这个开源项目汇集了来自全球JavaScript专家的深度分享,涵盖React Fiber架构、性能优化、异步编程、JavaScript引擎原理等核心主题,是中级开发者和技术决策者提升J

gitblog_00852的博客 619

JavaScript/ES6学习

JS面试题

weixin_43403054的博客 715

前端基础进阶(十二):深入核心,详解事件循环机制

Event Loop JavaScript的学习零散而庞杂,因此很多时候我们学到了一些东西,但是却没办法感受到自己的进步,甚至过了不久,就把学到的东西给忘了。为了解决自己的这个困扰,在学习的过程中,我一直试图在寻找一条核心的线索,只要我根据这条线索,我就能够一点一点的进步。 前端基础进阶正是围绕这条线索慢慢展开,而事件循环机制(Event Loop),则是这条线索的最关键的知识点。

Fuohua的博客 1378
上一篇: 【JS进阶】JS中的闭包
下一篇: 【Vue】Vue render 函数
cannotbecounted
博客等级 码龄7年 101粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值