首页 > 编程语言 >JavaScript 中的事件循环

JavaScript 中的事件循环

时间:2024-01-11 16:11:26浏览次数:37  
标签:调用 队列 JavaScript 任务 循环 事件 堆栈 回调

事件循环是 JavaScript 运行时环境的核心组件。它负责调度和执行异步任务。事件循环通过持续监视两个队列来工作:调用堆栈和事件队列。 调用堆栈是一种堆栈(LIFO)数据结构,存储当前正在执行的函数(存储代码执行期间创建的执行上下文)。 Web API是异步操作(setTimeout、获取请求、promise)及其回调等待完成的地方。它从线程池借用线程在后台完成任务,而不阻塞主线程。 作业队列(或微任务)是一个 FIFO(先进先出)结构,其中保存准备执行的async/await、promise、process.nextTick() 的回调。例如,已履行的 Promise 的解析或拒绝回调会排队到作业队列中。 任务队列(或宏任务)是一个 FIFO(先进先出)结构,用于保存准备执行的异步操作(定时器,如 setInterval、setTimeout)的回调。例如,超时的回调setTimeout()(准备好执行)会排队到任务队列中。 事件循环永久监视调用堆栈是否为空。如果调用堆栈为空,事件循环将查找作业队列或任务队列,并将任何准备好执行的回调出队到调用堆栈中。

标签:调用,队列,JavaScript,任务,循环,事件,堆栈,回调
From: https://www.cnblogs.com/jiangyueniannian/p/17958800

相关文章

  • 2023年网络攻击事件盘点
    1月BitKeep遭网络攻击,数字货币损失超900万美元区块链加密钱包BitKeep证实了一次网络攻击,该攻击允许攻击者分发带有欺诈性的Android应用程序,目的是窃取用户的数字货币。根据区块链安全公司PeckShield和多链区块链浏览器OKLink的说法,到目前为止,估计已有价值990万美元的资产被掠夺。勒......
  • SpringBoot中使用SpringEvent业务解耦神器实现监听发布事件同步异步执行任务
    场景SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135504554设计模式-观察者模式在Java中的使用示例-环境监测系统:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det......
  • 大话 JavaScript(Speaking JavaScript):第三十一章到第三十三章
    第三十一章:模块系统和包管理器原文:31.ModuleSystemsandPackageManagers译者:飞龙协议:CCBY-NC-SA4.0JavaScript没有内置模块支持,但社区已经创建了令人印象深刻的解决方法。要管理模块,可以使用所谓的包管理器,它们处理发现、安装、依赖管理等。模块系统JavaScript模......
  • 大话 JavaScript(Speaking JavaScript):第二十一章到第二十五章
    第二十一章:数学原文:21.Math译者:飞龙协议:CCBY-NC-SA4.0Math对象用作多个数学函数的命名空间。本章提供了一个概述。数学属性Math的属性如下:Math.E欧拉常数(e)Math.LN22的自然对数Math.LN1010的自然对数Math.LOG2Ee的底数2对数Math.LOG10Ee的十进制对数Ma......
  • 大话 JavaScript(Speaking JavaScript):第二十六章到第三十章
    第四部分:提示,工具和库原文:IV.Tips,Tools,andLibraries译者:飞龙协议:CCBY-NC-SA4.0本部分提供了使用JavaScript的技巧(最佳实践,高级技术和学习资源),并描述了一些重要的工具和库。第二十六章:元代码风格指南原文:26.AMetaCodeStyleGuide译者:飞龙协议:CCBY-NC-SA......
  • 大话 JavaScript(Speaking JavaScript):第十一章到第十五章
    第十一章:数字原文:11.Numbers译者:飞龙协议:CCBY-NC-SA4.0JavaScript对所有数字都使用单一类型:它将它们全部视为浮点数。但是,如果小数点后没有数字,则不显示小数点:>5.0005在内部,大多数JavaScript引擎都会优化并区分浮点数和整数(详情请参见JavaScript中的整数)。但这......
  • 大话 JavaScript(Speaking JavaScript):第十六章到第二十章
    第十六章:变量:作用域、环境和闭包原文:16.Variables:Scopes,Environments,andClosures译者:飞龙协议:CCBY-NC-SA4.0本章首先解释了如何使用变量,然后详细介绍了它们的工作方式(环境、闭包等)。声明变量在JavaScript中,您在使用变量之前通过var语句声明变量:varfoo;foo......
  • 大话 JavaScript(Speaking JavaScript):第一章到第五章
    第一部分:JavaScript快速入门原文:I.JavaScriptQuickStart译者:飞龙协议:CCBY-NC-SA4.0这部分是JavaScript的一个独立快速介绍。你可以在不阅读本书中的其他内容的情况下理解它,本书的其他部分也不依赖于它的内容。然而,阅读本书的提示在阅读本书的提示中适用。第一章:基......
  • 一次生产 KubeSphere 日志无法正常采集事件解决记录
    作者:宇轩辞白,运维研发工程师,目前专注于云原生、Kubernetes、容器、Linux、运维自动化等领域。前言2023年11月7号下午,研发同事反馈,项目线上日志平台某个服务无法查看近期的日志。我登上KubeSphere平台进行查看,发现日志收集展示停留在10月15号那天,而其它的服务是正常......
  • 彻底改变你的代码:JavaScript linter—Oxlint
    作为开发人员,总是在寻找能够简化工作流程并提高工作效率的工具。Oxlint是一个用Rust编写的JavaScriptlinter,现在提供了可以替代ESLint的新方案,其性能比ESLint提升了50-100倍。在本文中,将学习如何将Oxlint集成到开发流程中,充分利用其速度和效率。了解OxlintOxc(TheO......