【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

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8658

Js进阶9-事件循环机制

事件循环机制

晴雪月乔的博客 209

MaxEnt运行报错的各种问题及解决方法

由于我使用的环境数据并不是大部分人常用的worldclim上下载的气候数据,而是使用不同的四类环境数据,分别包括:降雨数据、气温数据、氮沉降数据和大气CO2浓度数据,数据需要分别从不同的网站下载,因此并不能得到非常一致的数据文件,导致MaxEnt运行时出现了各种各样的错误。文件终于能够读取了,然而计算到一半又弹出第三种问题,根据弹出的报错提示,找到错误所在那一行,用Notepad++打开,可以发现,这一行确实存在nan值,导致文件读取无法正常进行。出现上图所述的问题时,检查环境变量是否具有相同的行列号。

guye322的博客 1万+

手把手教你搞定CAC会议投稿:从LaTeX模板到PDF eXpress避坑全流程

本文详细解析CAC会议投稿全流程,重点介绍LaTeX模板调整、Turnitin查重技巧及PDF eXpress校验避坑指南。通过实战案例和代码示例,帮助研究者高效完成IEEE格式论文投稿,避免常见技术性失误,提升投稿成功率。

weixin_29969209的博客 397

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

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

2401_84434880的博客 924

【51单片机实物】基于51单片机设计的简易直流电机调测速系统(可用在普中开发板)

功能任务描述:将设置的转速与当前测量的转速比较,得出差值用于控制DAC0832的输出电压,从而控制直流电机的转速,使转速逐渐达到设置转速。在LED上显示设置转速(左2位LED)和当前转速(右2位LED),转速显示采用十进制。控制过程中,当前转速显示不断变化。*直流电机转速范围0-96r/s,误差±1r/s

嵌入式阿齐Archie 1万+

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

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

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

网络工程师面试题汇总(二)

网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。地址解析协议 ARP(Address Resolution Protocol)

悦分享 184

银行一表通监管报送系统详解

国家金融监管总局对于“一表通”的总体描述为:通过建立一套明细级、标准化的数据体系和汇总计算规则,将银行机构传送至监管可信区的业务明细数据汇总生成财务指标、监管指标和监管报表,大幅提升监管数据时效性,统一数据标准,实现数据间的穿透和整合,同时改变机构多头报送数据模式,减轻机构报送负担。

银行信息系统应用架构详解 2517

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

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

徐白知识星球 1454

智能制造——解读AI+工业设备预测性维护解决方案【附全文阅读】

摘要:本方案面向设备密集型制造企业,提供基于AI的预测性维护解决方案。通过工业物联网、大数据和AI算法,整合传感器数据与专家知识库,构建异常检测、故障诊断等模型,实现设备台账管理、智能点检等核心功能。方案配套软硬件工具矩阵,已在锂电子等行业落地应用,可降低维护成本30%以上,减少非计划停机50%,助力企业智能化转型。

cdfunlove的博客 138

JavaScript事件循环

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

热爱前端的大宝同学。 1015

[明道云] -基础教学1- 创建第一个工作表:从 0 到实用

明道云工作表相当于数据库表,是存储业务数据的核心组件。创建工作表主要有两种方式:1)从空白新建,通过添加字段(最多200个)、设置属性、配置表单样式;2)从Excel导入,需选择sheet、配置字段映射。创建后系统自动生成默认视图,支持多种视图形式(看板/日历等)。建议设置合适的标题字段和关联关系,初学者可在一小时内完成基础应用搭建。后续可扩展权限控制、工作流自动化等功能。

每日出拳老爷子的博客 556

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

nicexibeidage的博客 292

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

Anthony1453的博客 588

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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、付费专栏及课程。

余额充值