当前位置: 首页 > 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.准确率分析以及分类结果对比作图代码本文以红酒…...

终极指南:用VizTracer可视化Python代码执行的完整教程

终极指南&#xff1a;用VizTracer可视化Python代码执行的完整教程 【免费下载链接】viztracer VizTracer is a low-overhead logging/debugging/profiling tool that can trace and visualize your python code execution. 项目地址: https://gitcode.com/gh_mirrors/vi/vizt…...

OpenClaw知识库集成:Qwen3-VL:30B连接飞书文档中心

OpenClaw知识库集成&#xff1a;Qwen3-VL:30B连接飞书文档中心 1. 为什么需要智能文档助手 上个月整理季度技术文档时&#xff0c;我对着飞书里上百个分散的文档链接发愁——每次找资料都要在搜索框反复尝试关键词&#xff0c;遇到表格和图表更要逐页核对。直到发现OpenClaw能…...

ESP32上给LVGL做个‘懒加载’:分页与动态读取大文本的实战对比(附代码)

ESP32上LVGL大文本显示优化&#xff1a;分页加载与动态读取的深度对比与实践 在嵌入式设备上处理大文本显示一直是开发者面临的挑战之一。当我们在ESP32这样的资源受限平台上使用LVGL&#xff08;Light and Versatile Graphics Library&#xff09;显示超长文本时&#xff0c;如…...

英雄联盟智能助手:如何用League Toolkit提升你的游戏体验

英雄联盟智能助手&#xff1a;如何用League Toolkit提升你的游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在英雄联盟的…...

分子构象采样新范式:CREST工具解决药物研发核心挑战

分子构象采样新范式&#xff1a;CREST工具解决药物研发核心挑战 【免费下载链接】crest Conformer-Rotamer Ensemble Sampling Tool based on the xtb Semiempirical Extended Tight-Binding Program Package 项目地址: https://gitcode.com/gh_mirrors/crest/crest 在药…...

使用PyTorch Lightning优化PETRV2-BEV模型训练流程

使用PyTorch Lightning优化PETRV2-BEV模型训练流程 如果你正在训练像PETRV2这样的BEV感知模型&#xff0c;可能已经体会过那种“一步一坑”的感觉。数据加载复杂、多GPU训练配置繁琐、日志记录混乱、实验难以复现……这些工程上的琐事&#xff0c;常常比模型本身更让人头疼。 …...

Stable Diffusion VAE重构图像效果不理想?可能是你忘了调整这个关键参数

Stable Diffusion VAE图像重构效果优化指南&#xff1a;关键参数解析与实战调整 当你第一次使用Stable Diffusion的VAE&#xff08;Variational Autoencoder&#xff09;进行图像重构时&#xff0c;可能会遇到这样的困惑&#xff1a;明明按照教程一步步操作&#xff0c;为什么输…...

bert-base-chinese新手教程:从零开始学习中文预训练模型部署与使用

bert-base-chinese新手教程&#xff1a;从零开始学习中文预训练模型部署与使用 1. 认识bert-base-chinese模型 1.1 什么是BERT模型 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是Google在2018年发布的预训练语言模型。它通过大规…...

大致说一下spring bean的生命周期

面试 1、实例化 Bean 2、给 Bean 属性赋值 3、初始化 Bean 4、使用 Bean 5、销毁 Bean package com.example.demo.bean;import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import org.springframework.beans.factory.annotation.Value; import …...

游戏玩家如何选?网易UU/ToDesk远程控制延迟实测(含手机投屏技巧)

游戏玩家专属远程控制工具深度评测&#xff1a;延迟、画质与投屏技巧全解析 作为一名资深游戏玩家&#xff0c;你是否遇到过这样的场景&#xff1a;出差在外想用手机继续刷副本&#xff0c;却苦于找不到合适的远程控制方案&#xff1b;或是想在平板上玩PC独占的3A大作&#xff…...