JavaScript 中 setTimeout(, ) 的真正含义是什么? (事件循环解释!)

javascript 中 settimeout(, ) 的真正含义是什么? (事件循环解释!)

settimeout(…, 0ms) 在 javascript 中的真正含义是什么? (事件循环解释!)

好吧,让我们用 0ms 来分解整个 settimeout 的事情。乍一看,你可能会想,“兄弟,0ms 意味着它会立即运行,对吗?”但 javascript 有它自己的氛围,0 毫秒并不像你想象的那么即时。让我们一起来解决这个问题。

代码:

这是我们正在剖析的代码:

const promise = new promise((resolve, reject) => {  console.log(1);   settimeout(() => {     console.log("timerstart");    resolve("success");     console.log("timerend");  }, 0);   console.log(2); });promise.then((res) => {  console.log(res); })console.log(4);

输出呢?

1  2  4  timerStart  success  timerEnd  

大问题:0ms 发生了什么?

当看到settimeout(() => { … }, 0) 的时候,感觉里面的代码会在0ms后立即运行。但不,javascript 就像是,“兄弟,我有自己的系统,等你了!”

javascript 的系统:事件循环

javascript 不仅仅直接运行代码,它还有一个名为 事件循环 的很酷的系统来处理任务。像这样想一下:

主要任务(同步):

像 console.log() 这样的东西首先运行。这些都是直接的、面对面的任务。

微任务(promise):

接下来是承诺,甚至在计时器之前。就像他们有一张 vip 票一样。

任务队列(定时器,如 settimeout):

计时器位于生产线的后面,仅在微任务完成后运行。即使你给它 0ms,它也会等待。

分解代码

让我们一步步看看发生了什么:

立即学习“Java免费学习笔记(深入)”;

已创建承诺:

console.log(1) 立即运行。settimeout(() => { … }, 0) 被添加到任务队列。console.log(2) 立即运行。

promise .then():

.then() 回调被添加到 微任务队列。

console.log(4):

直接运行,因为它是主脚本的一部分。

微任务运行(vip):

promise 得到解决,因此 .then() 回调记录“成功”。

任务队列运行:

settimeout 回调终于轮到了:记录“timerstart”和“timerend”。

为什么 0ms 不代表“现在”?

即使你说 0ms,settimeout 也是总是延迟。不管怎样,javascript 都会将其推送到任务队列。在接触任务队列之前,系统首先清除所有同步任务和微任务(promise)。

所以,简单来说:

0 毫秒与时间无关,而是与等待轮到有关。

像这样想

想象一下您正在排队等待过山车:

同步码:购买快速通道票的人——他们是第一,毫无争议。承诺:持有 vip 通行证的人——即使迟到,他们也是下一个排队的人。计时器(如 settimeout):没有通行证的普通人。即使你告诉他们“0毫秒等待”,他们仍然必须站在常规队列中。

最终输出回顾

以下是我们代码中的事件顺序:

console.log(1)(同步)console.log(2)(同步)console.log(4)(同步)来自 .then() 的“成功”(微任务)console.log(“timerstart”)(任务队列)console.log(“timerend”)(任务队列)

为什么这很重要?

了解 0ms 的真正工作原理可以帮助您编写更好的异步代码。当你的朋友调试 javascript 中的随机延迟时,向他们解释这也是一个很酷的技巧。

所以下次当你看到 settimeout(() => { … }, 0) 时,请记住——这不是时间的问题,而是时间的问题。这是关于优先级!

以上就是JavaScript 中 setTimeout(, ) 的真正含义是什么? (事件循环解释!)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1499448.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
来自 Lamao LiveAPI:构建超级便捷的 API 文档(下)
上一篇 2025年12月19日 21:47:45
如何使用序列化器从快照中删除动态值
下一篇 2025年12月19日 21:47:59

相关推荐

  • 淘宝顺手买一件的东西是正品吗?是否值得入手?深度解析购物陷阱与机会

    淘宝顺手买一件的东西是正品吗?是否值得入手?深度解析购物陷阱与机会淘宝顺手买一件的东西是正品吗?是否值得入手?深度解析购物陷阱与机会淘宝顺手买一件的东西是正品吗?是否值得入手?深度解析购物陷阱与机会淘宝顺手买一件的东西是正品吗?是否值得入手?深度解析购物陷阱与机会

    在淘宝结算页面,那个永远比主商品便宜30%到50%的”顺手买一件”推荐位,就像超市收银台旁的糖果架,用难以抗拒的骨折价刺激着消费者的购买欲。但当我们看着9.9元的品牌护肤品小样,或19.9元的蓝牙耳机时,难免会产生疑惑:这些商品真的是正品吗?超低价背后是否存在消费陷阱? 一、解密平台推荐机制 1. …

    2026年9月26日 • 用户投稿
    100
  • 谈谈你对Spring AOP的理解,它有哪些实现方式?

    谈谈你对Spring AOP的理解,它有哪些实现方式?谈谈你对Spring AOP的理解,它有哪些实现方式?谈谈你对Spring AOP的理解,它有哪些实现方式?谈谈你对Spring AOP的理解,它有哪些实现方式?

    Spring AOP通过代理机制实现横切关注点的分离,提升代码模块化与可维护性。它基于JDK动态代理或CGLIB生成代理对象,在运行时织入增强逻辑,适用于方法拦截场景;而AspectJ支持更广泛的织入方式和连接点,适合复杂需求。两者可结合使用,Spring AOP常用且易用,AspectJ强大但复杂…

    2026年9月26日 • 用户投稿
    000
  • 抖音任务接单平台微信小程序是什么

    抖音任务接单平台微信小程序是什么抖音任务接单平台微信小程序是什么抖音任务接单平台微信小程序是什么抖音任务接单平台微信小程序是什么

    抖音任务接单平台微信小程序是一款专为抖音内容创作者打造的高效变现工具。 该小程序集成了任务获取、进度管理、收入统计、智能提醒等多项实用功能,帮助用户更便捷地完成商业合作,提升在抖音平台的内容变现能力。 抖音任务接单平台微信小程序的核心功能 任务接单:高效匹配 通过抖音任务接单平台微信小程序,用户可以…

    2026年9月26日 • 用户投稿
    000
  • 抖音网页版屏蔽用户怎么操作_抖音网页版屏蔽特定用户教程

    抖音网页版屏蔽用户怎么操作_抖音网页版屏蔽特定用户教程抖音网页版屏蔽用户怎么操作_抖音网页版屏蔽特定用户教程抖音网页版屏蔽用户怎么操作_抖音网页版屏蔽特定用户教程抖音网页版屏蔽用户怎么操作_抖音网页版屏蔽特定用户教程

    抖音网页版不支持屏蔽功能,需通过手机App操作。1. 拉黑用户:进入主页→点击“…”→选择“拉黑”;2. 设置“不给谁看”:发布视频时选“公开范围”→“不给谁看”→勾选用户;3. 开启私密账号:在隐私设置中启用,仅粉丝可看内容。网页版因功能受限且涉及隐私安全,相关操作均需手机端完成。 抖音网页版目前…

    2026年9月26日 • 用户投稿
    200
  • 从Scanner读取单个字符时处理空格的问题

    从Scanner读取单个字符时处理空格的问题从Scanner读取单个字符时处理空格的问题从Scanner读取单个字符时处理空格的问题从Scanner读取单个字符时处理空格的问题

    本文旨在解决Java中使用Scanner读取用户输入时,由于Scanner默认以空格作为分隔符,导致读取单个字符时出现的问题。我们将深入探讨Scanner的工作原理,并提供使用Scanner.nextLine()方法读取整行输入来解决此问题的方案,确保程序能够正确处理包含空格的输入。 在使用Java…

    2026年9月26日 • 用户投稿
    100
  • NVMe驱动器的SLC缓存用完后性能下降多少?

    NVMe驱动器的SLC缓存用完后性能下降多少?NVMe驱动器的SLC缓存用完后性能下降多少?NVMe驱动器的SLC缓存用完后性能下降多少?NVMe驱动器的SLC缓存用完后性能下降多少?

    NVMe驱动器在SLC缓存耗尽后写入速度会骤降至数十到两百MB/s,具体取决于NAND类型、容量和主控方案,QLC型号甚至可能低于机械硬盘速度。 NVMe驱动器在SLC缓存耗尽后,性能会经历显著的下降,通常写入速度会从数百甚至数千MB/s骤降至数十到两百MB/s的水平,具体取决于驱动器采用的NAND…

    2026年9月26日 • 用户投稿
    100
  • 什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?

    什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?

    线程池通过复用预先创建的线程,避免频繁创建销毁带来的开销,提升系统性能与稳定性。ThreadPoolExecutor是Java中实现线程池的核心类,其核心参数包括corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(非核心线程空闲存活时间)…

    2026年9月26日 • 用户投稿
    100
  • 如何通过豆包AI进行异常检测?离群值分析实战

    如何通过豆包AI进行异常检测?离群值分析实战如何通过豆包AI进行异常检测?离群值分析实战如何通过豆包AI进行异常检测?离群值分析实战如何通过豆包AI进行异常检测?离群值分析实战

    异常检测是识别数据集中不符合预期模式的数据点的过程,这些“异常”可能由错误、欺诈、设备故障等引起,在金融、网络安全、制造质量控制等领域具有重要意义。常见方法包括基于统计的z-score、iqr法;基于距离的knn;孤立森林;one-class svm;以及深度学习中的自编码器。其中孤立森林因高效性和…

    2026年9月26日 • 用户投稿
    100
  • 对象创建的主要流程是怎样的?(类加载检查、分配内存、初始化等)

    对象创建的主要流程是怎样的?(类加载检查、分配内存、初始化等)对象创建的主要流程是怎样的?(类加载检查、分配内存、初始化等)对象创建的主要流程是怎样的?(类加载检查、分配内存、初始化等)对象创建的主要流程是怎样的?(类加载检查、分配内存、初始化等)

    对象创建需经历类加载检查、内存分配和初始化三阶段。首先JVM检查类是否已加载,确保类结构合法并完成静态资源准备;随后在堆中为对象分配内存,采用指针碰撞或空闲列表方式,并通过TLAB或CAS解决并发问题;最后进行初始化,先将内存置零,设置对象头信息,再执行构造器完成实例化。类加载是前提,保障类型安全与…

    2026年9月26日 • 用户投稿
    100
  • 宏碁非凡主机摄像头模糊?CMOS 摄像头模组老化调校​

    宏碁非凡主机摄像头模糊?CMOS 摄像头模组老化调校​宏碁非凡主机摄像头模糊?CMOS 摄像头模组老化调校​宏碁非凡主机摄像头模糊?CMOS 摄像头模组老化调校​宏碁非凡主机摄像头模糊?CMOS 摄像头模组老化调校​

    宏碁非凡主机摄像头模糊主要与cmos模组老化或软件调校有关。1. 清洁摄像头表面灰尘;2. 更新或重装摄像头驱动;3. 调整亮度、对比度、锐度等设置;4. 重置bios设置;5. 检查隐私权限和系统更新;6. 若无效,则可能是cmos传感器老化,需更换模组;7. 可通过测试不同软件、重启、使用外接摄…

    2026年9月26日 • 用户投稿
    300
  • 抖音小黄车没有了怎么找回?小黄车掉了怎么恢复正常

    抖音作为我国知名的短视频平台,深受广大用户的喜爱。其中,抖音小黄车作为抖音平台的特色功能,为广大用户提供便捷的购物体验。有些用户在使用过程中,不小心将小黄车删除或丢失,导致购物权益受损。本文将为大家详细解析如何找回抖音小黄车,避免损失。 一、抖音小黄车丢失的原因 1. 误操作:用户在使用抖音小黄车时…

    2026年9月26日
    100
  • 华为P系列微信收款语音播报如何开启?教你设置语音提示步骤

    首先确保微信内开启“收款到账语音提醒”,再检查手机通知权限、媒体音量及勿扰模式,最后在电池设置中允许微信后台活动,即可实现华为P系列手机微信收款语音播报正常工作。 在华为P系列手机上开启微信收款语音播报,核心步骤其实并不复杂,主要围绕着确保微信应用本身的设置正确,以及手机系统层面的通知权限和音量配置…

    2026年9月26日
    200
  • Debian更新为何选择FetchDebian

    根据搜索结果,我没有找到为什么选择fetchdebian的具体信息,但是我可以为您提供一些关于debian更新的相关信息: Debian更新机制 Debian系统更新的主要方式是通过APT(Advanced Package Tool)包管理器进行的。APT是一个强大的工具,它可以自动处理软件包的安装…

    2026年9月26日
    100
  • Minecraft Forge 1.12.2 自定义玩家模型替换教程

    Minecraft Forge 1.12.2 自定义玩家模型替换教程Minecraft Forge 1.12.2 自定义玩家模型替换教程Minecraft Forge 1.12.2 自定义玩家模型替换教程Minecraft Forge 1.12.2 自定义玩家模型替换教程

    本教程旨在解决Minecraft Forge 1.12.2中替换玩家默认模型为BlockBench自定义模型的技术挑战。文章首先分析了手动渲染替换中常见的NullPointerException问题,指出其根本原因及手动实现复杂性。随后,重点推荐并概述了GeckoLib这一强大的动画模型库,作为简化…

    2026年9月26日 • 用户投稿
    200
  • Java微服务分布式事务实战:TCC模式与Seata框架深度整合

    Java微服务分布式事务实战:TCC模式与Seata框架深度整合Java微服务分布式事务实战:TCC模式与Seata框架深度整合Java微服务分布式事务实战:TCC模式与Seata框架深度整合Java微服务分布式事务实战:TCC模式与Seata框架深度整合

    TCC模式结合Seata框架是微服务中实现分布式事务的可靠方案,通过Try-Confirm-Cancel机制将事务控制提升至业务层,Seata以@GlobalTransactional和@TwoPhaseBusinessAction注解简化事务协调,实现资源的预留、确认与回滚,解决数据一致性难题。 …

    2026年9月26日 • 用户投稿
    200
  • 为什么视频流媒体需要特定编码格式?

    为什么视频流媒体需要特定编码格式?为什么视频流媒体需要特定编码格式?为什么视频流媒体需要特定编码格式?为什么视频流媒体需要特定编码格式?

    视频流媒体需特定编码格式,因其能高效压缩原始视频数据并确保跨设备兼容。编码格式通过去除冗余信息,在保证画质前提下显著降低码率,提升传输效率。H.264、H.265、AV1等标准支持自适应比特率(ABR)流媒体,实现不同网络条件下流畅播放。同时,编码格式影响画质表现、色彩深度、HDR支持及音频优化,兼…

    2026年9月26日 • 用户投稿
    100
  • 线性代数中的满射:它与“满秩”有何关系?

    线性代数中的满射:它与“满秩”有何关系?线性代数中的满射:它与“满秩”有何关系?线性代数中的满射:它与“满秩”有何关系?线性代数中的满射:它与“满秩”有何关系?

    满射与满秩的关系取决于矩阵维度:当行数m≤列数n时,满秩(rank=min(m,n)=m)等价于满射(rank=m);当m>n时,满秩(rank=n)无法满足满射(需rank=m),故不等价。 线性代数中,一个线性变换如果是“满射”,意味着它的像(输出空间)能够完全覆盖其协同域。而矩阵的“满秩…

    2026年9月26日 • 用户投稿
    200
  • 时间处理最佳实践:UTC 与时区转换

    时间处理最佳实践:UTC 与时区转换时间处理最佳实践:UTC 与时区转换时间处理最佳实践:UTC 与时区转换时间处理最佳实践:UTC 与时区转换

    本文旨在阐述在应用程序中处理日期和时间的最佳实践,尤其是在 UI 和后端之间传递时间信息时。核心思想是坚持使用 UTC 作为数据存储和交换的通用标准,并在用户界面展示或特定业务逻辑需要时才进行时区转换。本文将深入探讨如何使用 java.time 库中的 Instant 和 ZonedDateTime…

    2026年9月26日 • 用户投稿
    400
  • 三星990 Pro 4TB SSD评测 8nm主控+176层3D NAND

    三星990 Pro 4TB SSD评测 8nm主控+176层3D NAND三星990 Pro 4TB SSD评测 8nm主控+176层3D NAND三星990 Pro 4TB SSD评测 8nm主控+176层3D NAND三星990 Pro 4TB SSD评测 8nm主控+176层3D NAND

    三星990 pro 4tb是目前pcie 4.0时代高端pc存储的理想选择,1.它几乎榨干了pcie 4.0的性能潜力,连续读写速度达7450mb/s和6900mb/s,随机读写iops高达140万和155万;2.采用4tb大容量与单面m.2 2280规格,满足专业用户和重度玩家需求;3.搭载三星自…

    2026年9月26日 • 用户投稿
    300
  • NVIDIA RTX 4090 Founder Edition拆解 均热板结构解析

    NVIDIA RTX 4090 Founder Edition拆解 均热板结构解析NVIDIA RTX 4090 Founder Edition拆解 均热板结构解析NVIDIA RTX 4090 Founder Edition拆解 均热板结构解析NVIDIA RTX 4090 Founder Edition拆解 均热板结构解析

    rtx 4090 fe的均热板设计独特,其尺寸庞大且集成度高,几乎覆盖整个pcb板上的主要发热元件,包括gpu核心、gddr6x显存及供电模块,通过内部真空腔体中的工质相变循环,实现热量的迅速均匀传导,大幅提升散热效率。相比传统热管或多段式散热方案,这种整体式均热板能有效避免局部热点,确保高负载下稳…

    2026年9月26日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信