当前位置: 首页 > news >正文

JS相关八股之什么是事件循环

在JavaScript中,“事件循环”(Event Loop)是一个非常重要的概念,它是指JavaScript引擎如何在单线程中处理异步操作的机制。单线程意味着在任意时刻,JavaScript代码只能执行一个任务。

一.事件循环的工作流程大致如下:

  1. 执行栈(Call Stack)

    • 当一个脚本开始执行时,它首先会进入执行栈。这里会按照顺序执行代码中的函数调用。
    • 执行栈是一个LIFO(后进先出)结构,最新添加到栈的任务会被首先完成。当前正在执行的函数将位于栈顶。
  2. 任务队列(Task Queue)

    • 当异步事件(如setTimeoutsetInterval、I/O、UI事件等)到达预定目标时,相应的回调函数会被放入任务队列。
    • 这些回调函数会等待当前执行栈中的所有任务都完成,即执行栈被清空。
  3. 事件循环

    • 一旦执行栈空了,事件循环就会从任务队列中取出排在最前面的任务,然后将其放入执行栈中去执行。
    • 这个过程是循环进行的,因此被称作“事件循环”。

二.宏任务与微任务:

在现代JavaScript引擎中,任务队列又被分为宏任务(Macro Task)队列和微任务(Micro Task)队列。

  • 宏任务:包括setTimeoutsetInterval、I/O、UI事件等。
  • 微任务:包括Promise的回调、Object.observe的变化回调、MutationObserver的回调等。

执行栈为空时,事件循环首先会检查微任务队列。如果微任务队列不为空,事件循环会连续执行微任务队列中所有的任务,直到微任务队列为空。之后,事件循环才会执行一个宏任务。完成宏任务后,事件循环又会检查微任务队列,这个过程会反复进行。

这种机制确保了微任务有更高的优先级和更快的响应时间,因为它们不需要等待下一轮事件循环。

事件循环是JavaScript实现异步编程的核心,它允许JavaScript引擎在执行长时间运行的任务时,仍然可以处理UI更新,接收用户输入,以及在合适的时间执行异步操作的回调。理解事件循环对于编写高效的异步代码至关重要。

相关文章:

JS相关八股之什么是事件循环

在JavaScript中,“事件循环”(Event Loop)是一个非常重要的概念,它是指JavaScript引擎如何在单线程中处理异步操作的机制。单线程意味着在任意时刻,JavaScript代码只能执行一个任务。 一.事件循环的工作流程大致如下&…...

SpringCloud集成Skywalking链路追踪和日志收集

1. 下载Agents https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz 2. 上传到服务器解压 在Spring Cloud项目中,每部署一个服务时,就拷贝一份skywalking的agent文件到该服务器上并解压。不管是部署…...

HTTP 域名和主机是一回事吗?有了主机和域名,如何建站?

域名不等于主机名,例如baidu.com是一个权威域的域名,但是根本没有一个主机的名字叫做baidu.com,但是dns.baidu.com就是一个主机名,它就是负责baidu.com的服务器的主机名,www.baidu.com也是一个主机名,它是百度web服务器的主机名。…...

运营干货:四个技巧掌握爆款选题方法

在运营工作中,选题是一项至关重要的工作,选对了一个热门话题,就能吸引大量用户的关注和互动,从而取得更好的运营成果。 今天,就给大家分享四个爆款选题方法,让大家的运营更上一层楼! 第一种&a…...

柯桥商务口语之怎么样说英语更加礼貌?十个礼貌用语get起来!

当你在国外需要帮助的时候,这些礼貌用语真的是能够帮到你的哦 1.Would/Could you help me? 你可帮助我吗? 相信有些人想请求帮助的时候,一开口就用Can you,这个用在朋友或者熟人上面当然是没有问题的,但是如果是向…...

嵌入式工程师如何摸鱼?

有老铁问我,做嵌入式开发要加班吗? 也不知道搞什么鬼,现在的年轻人对加班这么抵触。 我刚做开发那会,啥也不懂,每天基本都要加班到晚上7-9点不等,我并不抵触加班,因为早早回家,也没什…...

C++语言题库(一)—— 基本知识类

目录 1. Hello World! 2. 据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少? 3. 给定一个华氏温度F…...

gemini1.5 API调用

https://ai.google.dev/pricing?hlzh-cn 查询可用的model https://generativelanguage.googleapis.com/v1beta/models?keyxxx 使用postman调用 https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?keyxxx https://ai.google…...

C++从入门到精通——const与取地址重载

const与取地址重载 前言一、const正常用法const成员函数问题const对象可以调用非const成员函数吗非const对象可以调用const成员函数吗const成员函数内可以调用其它的非const成员函数吗非const成员函数内可以调用其它的const成员函数吗总结 二、取地址及const取地址操作符重载概…...

手写spring IOC底层源码来模拟spring如何利用多级缓存解决循环依赖的问题

在文章开始之前,先来看一张spring IOC加载过程的脑图吧 Spring IOC的加载过程 首先,当我们去new了一个applicationContext,它底层呢就会把我们配置的bean进行扫描,然后创建成一个一个的beanDefinition放在我们的beanDefinitionMap中,此时就有了一切创造bean的原料信…...

C++11 Thead线程和线程池

参考资料&#xff1a; 2、5.lock_guard 与 std::unique_lock-陈子青的编程学习课堂 (seestudy.cn) 3、C11 多线程编程-小白零基础到手撕线程池_哔哩哔哩_bilibili 一、 C11 Thead线程库的基本使用 # include <thread> std::thread t(function_name, args...); // 线…...

Windows版Apache 2.4.59解压直用(免安装-绿色-项目打包直接使用)

windows下Apache分类 Apache分为 安装版和解压版 安装版: 安装方便&#xff0c;下一步------下一步就OK了&#xff0c;但重装系统更换环境又要重新来一遍&#xff0c;会特别麻烦 解压版&#xff08;推荐&#xff09;&#xff1a; 这种方式&#xff08;项目打包特别方便&#x…...

刀具表面上的微结构

刀具表面微结构通常指在刀具表面对特定功能设计的微观纹理&#xff0c;这些纹理可以是沟槽、凹坑、凸起或任何其他形式的微观图案。这些微结构的设计和应用是为了改善刀具的切削性能&#xff0c;减少切削力和切削温度&#xff0c;提高切削效率和精度&#xff0c;同时降低切削液…...

css3实现微信扫码登陆动画

在做微信扫码登陆时&#xff0c;出现一个背景光图上下扫码动画&#xff0c;用css3图片实现。 实现原理&#xff1a; 1.准备一个渐变的背景.png图 2.css动画帧实现动画 看效果&#xff1a; css代码&#xff1a; #wx-scan{position: absolute;top:0px;left: 50%;z-index: 3;ma…...

vue3 导入excel数据

所需包 "xlsx": "^0.18.5"页面导入包 import * as XLSX from xlsx; import {genFileId, UploadProps, UploadRawFile,ElTable } from element-plus;页面 <el-upload accept".xlsx" :on-change"changeExcel" :on-exceed"ha…...

C# linq 根据多字段动态Group by

实现类&#xff1a; public static class LinqHepler {/// <summary>/// 根据单个字段动态Group/// </summary>/// <typeparam name"T"></typeparam>/// <param name"source"></param>/// <param name"prop…...

C语言学习/复习22----阶段测评编程题

一、阶段测评练习 题1&#xff1a; 题2&#xff1a;...

LeetCode-1766. 互质树【树 深度优先搜索 广度优先搜索 数组 数学 数论】

LeetCode-1766. 互质树【树 深度优先搜索 广度优先搜索 数组 数学 数论】 题目描述&#xff1a;解题思路一&#xff1a;DFS 中记录节点值的深度和编号&#xff0c;回溯写法。关键点是1 < nums[i] < 50解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1…...

“数据安全服务能力”评定资格认证!不容错过

数据安全服务能力评定是指对数据安全服务提供商从事数据安全服务综合能力的评定&#xff0c;包括技术能力、服务能力、质量保证能力、人员构成与素质、经营业绩、资产状况等要素。 一、能力评定类型与等级 数据安全服务能力分为二个类型&#xff1a;数据安全评估、数据安全建…...

【MATLAB 分类算法教程】_3麻雀搜索算法优化支持向量机SVM分类 - 教程和对应MATLAB代码

分类代码案例3:麻雀搜索算法优化支持向量机SVM分类 - MATLAB完全代码教程 1. 初始化代码2.读取数据代码3.数据预处理代码4.利用麻雀搜索算法SSA求解最佳的SVM参数c和g代码5.根据最佳的参数进行SVM模型训练代码6.SVM模型预测代码7.准确率分析以及分类结果对比作图代码本文以红酒…...

5分钟永久激活Windows和Office:KMS智能激活终极指南

5分钟永久激活Windows和Office&#xff1a;KMS智能激活终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗&#xff1f;Office文档突然变成只读…...

如何用LDBlockShow高效绘制连锁不平衡热图:从入门到精通的完整指南

如何用LDBlockShow高效绘制连锁不平衡热图&#xff1a;从入门到精通的完整指南 【免费下载链接】LDBlockShow LDBlockShow: a fast and convenient tool for visualizing linkage disequilibrium and haplotype blocks based on VCF files 项目地址: https://gitcode.com/gh_…...

微信聊天记录终极备份指南:5步将珍贵对话永久保存到电脑

微信聊天记录终极备份指南&#xff1a;5步将珍贵对话永久保存到电脑 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因手机丢失、系统崩溃或更换设备而永远失去了…...

芯片设计复杂度量化:从经验估算到行业标准工时的工程实践

1. 芯片设计复杂度&#xff1a;从模糊感知到精确量化的工程革命在半导体行业摸爬滚打了十几年&#xff0c;我见过太多项目因为初期对“工作量”的误判而陷入泥潭。市场部拿着一个充满诱惑的规格书&#xff0c;研发总监拍着胸脯说“没问题&#xff0c;半年搞定”&#xff0c;结果…...

Axure RP 多版本中文语言包技术解析:从键值对到专业本地化的架构演进

Axure RP 多版本中文语言包技术解析&#xff1a;从键值对到专业本地化的架构演进 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...

如何用开源Lenovo Legion Toolkit彻底掌控你的拯救者笔记本:技术深度解析与实战指南

如何用开源Lenovo Legion Toolkit彻底掌控你的拯救者笔记本&#xff1a;技术深度解析与实战指南 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/Lenovo…...

在Google Cloud上构建OpenAI兼容API网关:无缝对接Vertex AI模型

1. 项目概述&#xff1a;在Google Cloud上搭建你自己的OpenAI兼容API网关 如果你正在寻找一种方法&#xff0c;能够让你手头那些原本为OpenAI ChatGPT设计的应用&#xff0c;无缝对接上Google Cloud Vertex AI的强大模型&#xff0c;比如Gemini Pro、PaLM 2或者Codey&#xff…...

Pearcleaner:macOS终极免费应用清理工具,彻底告别数字残留

Pearcleaner&#xff1a;macOS终极免费应用清理工具&#xff0c;彻底告别数字残留 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾经在macOS上删除应…...

AzurLaneAutoScript:基于图像识别与智能调度的碧蓝航线全自动脚本架构解析

AzurLaneAutoScript&#xff1a;基于图像识别与智能调度的碧蓝航线全自动脚本架构解析 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoSc…...

从AWE Designer到独立声卡:awb二进制文件固化Flash的实战解析

1. 从AWE Designer到独立声卡的核心逻辑 第一次接触AWE Designer的朋友可能会疑惑&#xff1a;为什么要把算法从PC端搬到开发板&#xff1f;简单来说&#xff0c;这就好比把厨师做好的预制菜打包成罐头——让美味脱离厨房环境也能随时享用。AWE Designer原本需要依赖电脑实时运…...