js事件循环的理解

js事件循环的理解:

js事件循环是一种异步执行的机制,因为js是单线程运行的,运行在浏览器和node.js中的,因为浏览器和node.js为它异步API提供了多线程支持,执行是由上到下执行先执行同步,在中间出现宏任务和微任务时将宏任务和微任务先放入任务队列等待处理,将同步执行完毕,从任务队列中先将微任务执行然后执行宏任务

js执行是从宏任务开始,先拿一个宏任务执行,清除一个任务队列在拿一个宏任务在清除一个任务队列

事件循环就是不断的判断主线程是否为空,如果为空就将任务队列中的事件放到主线程中执行,这个过程会不断循环直到执行完毕

js的事件循环执行:

js事件循环是从上到下依次执行的,在执行中先执行一个宏任务,因为执行时会出现异步执行又因为异步是属于微任务所以当js执行时碰到异步时会将它先存放在微任务的队列中,因为可能出现定时器,延时器他们属于一个宏任务将它放在宏任务队列中,继续向下执行同步,当所有同步执行完毕在执行一个队列的微任务清除整个任务队列在执行宏任务队列清除宏任务队列因为微任务的优先级大于宏任务的优先级所以先执行微任务,然后在执行一个宏任务在清除一个任务队列直到整个代码执行完毕

js事件循环分为同步执行和异步执行代码

1,如何理解同步

同步(sync):是按照代码顺序执行从上向下执行,立即执行,会阻塞代码执行

例:

同步操作会阻塞代码的继续执行,直到操作完成

<script> //同步 从上到下执行,会阻塞代码执行,上一段代码执行完毕后执行下段 console.log("开始"); console.log("中间"); console.log("结束"); // 执行顺序 开始 中间 结束 </script>

2,如何理解异步

异步(async):是先执行同步代码在执行异步代码,同步代码中出现异步代码会跳过执行

promise.then才会被放在微任务中,

<script> // 异步 从上到下执行,不会阻塞代码执行,像将同步代码执行,中间如果出现异步代码, // 先跳过异步代码,将所有同步代码执行完毕在执行异步代码,此间异步代码先存储到任务队列中 console.log("开始"); setTimeout(function(){ console.log("异步操作"); },0) console.log("结束"); // 执行顺序 开始 结束 异步操作 </script>

03,主线程与异步线程

js是单线程,我们又称该线程为js主线程,主线程处理同步代码

单线程:同时间只能做一件事情(同步),多线程同时间可以做多件事情(异步)

为什么js单线程可以做多件事情或可以异步?

因为js是运行在浏览器和node.js中的,使用为它异步API提供了多线程支持

<script> console.log("开始"); setTimeout(function(){ console.log("异步操作"); },0) console.log("结束"); // 执行顺序 开始 结束 异步操作 </script>

04,宏任务,微任务

在js中异步代码又分为宏任务和微任务

宏任务:包括setTimeout,setInterval,事件处理函数

微任务:包括Promise.then回调,Promise.catch回调

宏任务是代码运行环境提供的,微任务是语言提供的,微任务的优先级大于宏任务

<script>

console.log("开始"); ​ setTimeout(function(){ ​ console.log("宏任务"); ​ },0) ​ Promise.resolve().then(()=>{ ​ console.log("微任务");

}) ​ console.log("结束");

//执行顺序 开始 结束 微任务 宏任务

</script>

05,任务队列

视频演示(https://img-blog.csdnimg.cn/cc12512809dd413d8c0ba32d31fe7738.gif#pic_center)

任务队列是用于存储待处理回调函数的队列

回调函数包括:用户交互的事件,点击,滚动处理函数,忘了亲亲回调,定时器等

执行是先执行同步,在中间出现宏任务和微任务时将宏任务和微任务先放入任务队列等待处理,将使用同步执行完毕,从任务队列中先将微任务执行然后执行宏任务

06,理解事件循环

事件循环就是不断的判断主线程是否为空,如果为空就将任务队列中的事件放到主线程中执行,这个过程会不断循环直到执行完毕

<script> console.log('Script 1 开始');

Promise.resolve().then(function() { ​ console.log('Script 1 Promise'); ​ }); ​ ​ console.log('Script 1 结束'); ​ </script> ​ ​ <script> ​ console.log('Script 2 开始');

Promise.resolve().then(function() { ​ console.log('Script 2 Promise'); ​ }); ​ ​ console.log('Script 2 结束');

//执行顺序 Script 1 开始 Script 1 结束 Script 1 Promise Script 2 开始 Script 2 结束 Script 2 Promise ​ </script>

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

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

相关文章

01 SQL基础 -- 初识数据库与安装

一、初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。该数据集合称为数据库(Database, DB)。用来管理数据库的计算机系统称为数据库管理系统(Database Management System, DBMS) 1.1 DBMS 的种类 DBMS 主要通过数据的保存格式…

【MySQL】数据库开篇

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 本系列传送门 1. 什么是数据库&#xff1f; 2. 为什么使用数据库 3. 数据库的分类 4. NoSQL 与关系…

全志R128 SDK HAL 模块开发指南——PMU

PMU PMU - 电源管理单元&#xff0c;负责系统各模块供电及电池充放电管理。 模块配置 regulator 相关配置项&#xff1a; Drivers Options --->soc related device drivers --->REGULATOR Devices --->[*] enable regulator driver[*] regulator testpower 相关配…

android android.permission.MANAGE_EXTERNAL_STORAGE使用

android11 及以上版本&#xff0c;如果release版本要读取外部存储公共目录&#xff0c;即sdcard公共目录&#xff0c;需要在androidManifest.xml下申明 <uses-permission android:name"android.permission.MANAGE_EXTERNAL_STORAGE" /> 如果要发版到海外&…

【UE Niagara】光束发射模块学习

效果 步骤 1. 新建一个Niagara发射器&#xff0c;使用Empty模板&#xff0c;这里命名为“NE_Beam” 打开“NE_Beam”&#xff0c;添加条带渲染器 添加“Spawn Burst Instantaneous”模块&#xff0c;设置生成数量为100 添加一个“Beam Emitter Setup”模块 再添加一个“Spawn …

4-10 面经

1、说一下项目的整体架构 2、RabbitMQ和kafka的特点&#xff0c;各自适用于什么场景 3、kafka为什么是高可用的 4、说一下Es的分片 5、说一下你们redis集群结构&#xff0c;redis的使用场景 6、分片集群中&#xff0c;3个主节点&#xff0c;3个从节点&#xff0c;如果某个主从节…

Linux C应用编程:MQTT物联网

1 MQTT通信协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传 输&#xff09;是一种基于客户端-服务端架构的消息传输协议&#xff0c;如今&#xff0c;MQTT 成为了最受欢迎的物联网协议&#xff0c;已广泛应用于车联网、智能家居、即时聊…

sqoop:错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster(已解决)

1 报错信息 错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster 说明&#xff1a; 操作将数据库中的数据导入到HDFS中 执行sqoop import --connect jdbc:mysql://aaa01:3306/mysql --username root --password root --table test 时报了以下错误 2 报…

遥控小车电子方案

遥控小车的功能开发主要包括以下几个方面&#xff1a; 1.基本功能开发&#xff1a; 前进、后退、左转、右转&#xff1a;通过遥控器上的控制按钮&#xff0c;实现小车的前进、后退、左转和右转。加速、减速&#xff1a;通过遥控器上的油门控制按钮&#xff0c;实现小车的加速…

【深度学习】Fine-Grained Face Swapping via Regional GAN Inversion高保真换脸范式

文章目录 代码介绍实践效果 帮助、问询 代码 https://github.com/e4s2022/e4s 介绍 Fine-Grained Face Swapping via Regional GAN Inversion 提出一种新的高保真换脸范式&#xff0c;能够保留期望的微妙几何和纹理细节。从微观面部编辑的角度重新思考换脸任务&#xff0c;基…

Matlab 实时读取串口并绘图

Matlab 实时读取串口并绘图 Vofa Vofa 是一个很好的跨平台上位机软件&#xff0c;但是它无法保存数据&#xff0c;而且作者也并没有要继续更新的意思&#xff0c;保存数据功能应该是遥遥无期了。因此本文使用 Matlab 实时读取串口数据&#xff0c;并使用 plot 函数绘制。 vo…

洛谷P1305 新二叉树

Java 代码 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();char arr[][] new char[n][3];for (int i 0; i < n; i) {String strsc.next();char arr1[]str.toCharArray()…

常见分类算法及其应用

常见分类算法及其应用 一、引言 在机器学习和数据挖掘领域&#xff0c;分类算法是非常重要的一类算法。它们被广泛应用于各种场景&#xff0c;如邮件过滤、金融欺诈检测、疾病预测等。本文将介绍几种常见的分类算法&#xff0c;包括逻辑回归、决策树、随机森林、支持向量机和…

数据结构 动态规划(Dynamicprogramming)详解

动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种在数学、计算机科学和经济学中使用的&#xff0c;通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。动态规划的基本思想…

Linux学习-网络UDP

网络 数据传输,数据共享 网络协议模型 OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式&#xff08;数据报、流式&#…

Linux 中断会产生嵌套吗?

文章目录 1. 前言2. Linux 中断是否会嵌套&#xff1f;2.1 分析背景2.2 中断处理抢占、嵌套可能性分析2.3 中断处理抢占、嵌套小结 3. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. …

拥塞控制相关总结

拥塞控制概念 网络拥塞&#xff1a;当某个阶段&#xff0c;网络中涌入大量数据包时&#xff0c;可能会导致路由器的转发不及时&#xff0c;大量数据包会陆续填满路由器的缓冲区&#xff0c;缓冲区满了&#xff0c;再涌入数据时就会造成数据的丢失&#xff0c;这时网络发生了拥塞…

hexo接入github Discussions评论系统

评论存储仓 可以是你的博客项目的(github)仓库&#xff0c;也可以单独新建一个评论存储仓库。 我的博客项目在gitee上&#xff0c;就以新建存储仓为例&#xff1a; 使用Discussions评论系统必须开通Discussions模块&#xff01; 安装giscus插件 https://github.com/apps/…

如何在香橙派AIpro开发板升级CANN软件包

香橙派AIpro开发板是香橙派联合昇腾精心打造的高性能AI开发板&#xff0c;开发者可以基于昇腾CANN软件栈能力&#xff0c;快速构建AI应用和业务&#xff0c;实现图像、视频等多种数据分析与推理计算。在之前的文章中&#xff0c;我们已经了解了如何搭建开发环境&#xff0c;并基…

通过调用Vcenter-Api获取Vcenter中服务器信息

通过调用Vcenter-Api获取Vcenter中服务器信息 文章目录 通过调用Vcenter-Api获取Vcenter中服务器信息1. 获取Vmware API帮助文档2. 获取访问凭证3. 获取服务器清单4. 获取服务器更多信息5. 获取虚机更多信息6. 获取磁盘信息7. 获取操作系统相关 1. 获取Vmware API帮助文档 htt…