JavaScript执行顺序

EWF写保护功能详解:从安装到实战操作指南 本文详细介绍了EWF写保护功能的安装与实战操作指南。EWF(Enhanced Write Filter)通过重定向写入操作保护硬盘分区,特别适合需要长期稳定运行的系统场景。文章涵盖从安装准备、图形界面操作到命令行高级管理的全流程,并提供了常见问题的解决方案,帮助用户轻松掌握这一实用工具。 阅读详情

JavaScript是单线程的,同一时间只能做一件事情,也就是只有一个调用栈(Call Stack),调用栈采用的是后进先出的规则,一次只调用一个任务,可以嵌套。在执行调用栈的时候会先执行同步任务,当遇到异步任务的时候,异步任务会在异步任务有结果后,将注册的回调函数放入异步任务队列(先进先出)。异步任务队列分为宏任务队列和微任务队列。这里就有两个新名词:宏任务和微任务

异步任务被分为两类:宏任务和微任务。

个人理解:“同步任务、异步任务与“宏任务、微任务”是描述任务两个不同维度的东西,没有谁属于谁。根据下面的定义会发现宏任务中也包含同步任务(新程序或子程序直接被执行)  

宏任务队列包括:新程序或子程序直接被执行、事件的回调函数(点击事件触发的回调函数)、setTimeout、setInterval、I/O、UI Rendering等等。宏任务中的事件放在callback queue中,由事件触发线程维护。

微任务队列包括:Process.nextTick(Nodejs独有)、Promise.then.catch.finally、MutationObserver等等。微任务的事件放在微任务队列中,由js引擎线程维护。

那么同步任务、宏任务、微任务是按什么顺序运行的,就要通过事件循环(Event Loop)来解决了。

事件循环的处理步骤

第一步:判断任务是同步任务还是异步任务;如果是同步任务,则同步任务会被加入到调用栈,同步任务会在调用栈中按照顺序等待主线程依次执行;如果是异步任务,进行第二步

第二步: 异步任务会在异步任务有了结果后,将注册的回调函数分别按前面的分类放入到宏任务队列和微任务队列中,当主线程空闲的时候(调用栈被清空),微任务队列中的任务会按照先入先出的原则被读取到栈内等待主线程的执行。

第三步:微任务队列被清空以后,会渲染页面,渲染完页面以后,再按照先进先出的原则去执行宏任务队列中的任务,执行完一个宏任务后再重复第一步直至所有宏任务也被清空;

Demo

        console.log('开始');

        Promise.resolve().then(function () {
            console.log('微任务1');
            Promise.resolve().then(() => {
                console.log('微任务2');
                Promise.resolve().then(() => {
                    console.log('微任务3');
                })
            })
        })

        setTimeout(function () {
            console.log('2秒延时的宏任务' + new Date());
            Promise.resolve().then(() => {
                console.log('微任务嵌套在宏任务内1');
            })
        }, 2000);

        Promise.resolve().then(() => {
            console.log('微任务4');
            Promise.resolve().then(() => {
                console.log('微任务5');
                Promise.resolve().then(() => {
                    console.log('微任务6');
                })
            })
        })

        setTimeout(function () {
            console.log('宏任务1' + new Date());
            Promise.resolve().then(() => {
                console.log('微任务嵌套在宏任务内1');
            })
        }, 0);

        setTimeout(function () {
            console.log('宏任务2' + new Date());
            Promise.resolve().then(() => {
                console.log('微任务嵌套在宏任务内2');
            })
        }, 0);

        console.log('结束');

结果为:

 

Spring AI + RAG 构建电商智能客服:从 PDF 文档解析到精准问答的全链路实战 核心框架:向量数据库:- PostgreSQL + pgvector (生产推荐)- Redis Stack (轻量级方案)- ChromaDB (快速原型)文档解析:- Apache PDFBox: PDF 文本提取- Spring AI Document Readers: 结构化解析大模型:- 阿里云百炼 (DashScope)- 本地部署:Qwen/ChatGLM/*** 电商领域实体*/@Data@Builder@ToString/*** 商品类型。 阅读详情

相关推荐

[QMT量化交易小白入门]-三十五、如何将聚宽策略信号转为QMT实盘交易

Flask是一个轻量级的Web应用框架,它提供了简单而灵活的方式来构建Web应用程序。在本案例中,将使用Flask来搭建一个本地服务,用于监听来自jq2qmt.py脚本的交易信号,并根据信号执行相应的下单操作。

木头大左的博客 2637

JavaScript--代码执行顺序

第一个微任务执行完毕,开始执行第二个宏任务setTimeout,遵循先执行主线程宏任务,再执行微任务process.nextTick,输出2,4,3,5;开始执行第三个宏任务setTimeout,遵循先执行主线程宏任务,再执行微任务,输出9,11,10,12。3、宏任务里如果有宏任务,不会执行里面的那个宏任务,而是被丢进任务队列后面,所以会最后执行。此时,主代码块执行完毕,即第一个宏任务执行完毕,开始执行微任务,输出 6,8;1、微任务是在宏任务的执行中产生的,所以一开始程序执行时是没有微任务的。

wjbltxx的专栏 1631

玩转企业微信群机器人:一份超详细的Webhook消息推送指南

企业微信群机器人是一个连接内部协作与外部服务的强大桥梁。通过灵活运用本文介绍的各种消息类型,你可以构建出丰富多彩、信息明确的自动化通知系统,极大地提升团队沟通效率。现在,就动手试试,将你的第一个机器人集成到工作流中吧!如果你有任何有趣的机器人应用场景或遇到了问题,欢迎在评论区留言交流!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3880

JavaScript执行顺序总结

js执行顺序

qq_41872385的博客 5520

JavaScript 执行顺序梳理 , 建议收藏!

.概念 1.解释型语言执行步骤 预编译 扫描上下文。扫描错误 函数和变量声明的提升 解释执行 一条一条执行代码 2.任务队列event queue ????异步任务进入event queue任务队列 所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务

Jack, what else can you do besides holding your little darling? 1604

js【深度解析】代码的执行顺序

我们将每一句要执行js 代码当做一个任务,则 js 代码可以按照其执行方式的不同,按下图分类微任务:被放入微任务队列(micro task queue)中等待执行的代码因为Promise、async 、await 都是 ES6 语法定义的宏任务:被放入 Web APIs 中等待执行的代码因为 setTimeout 、setInterval 都是浏览器定义的。

朝阳39的博客 2723

ES6-Promise:代码执行顺序 / 从上到下的顺序依次执行 / 像一条纸带 / 像一条河流 / promise / async await / vue 项目为什么封装接口请求要用promise

待定状态的 Promise 对象要么会通过一个值被兑现(fulfilled),要么会通过一个原因(错误)被拒绝(rejected)。如果 promise 在一个相应的处理程序被绑定时就已经被兑现或被拒绝了,那么这个处理程序就会被调用,因此在完成异步操作和绑定处理方法之间不会存在竞争状态。这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 Promise ,以便在未来某个时候把值交给使用者。Promise将异步执行的程序变成同步执行,所谓的在开发中解决回调嵌套的问题。

snow的博客 1811

JavaScript:全面解析各种浏览器网页中的JS代码的执行顺序

        近来我通过一些测试以全面的解析网页在各种浏览器中的JavaScript代码的执行顺序,在这儿做个记录。        我们知道javaScript是一种解释型语言,他的执行是自上而下,但是各个浏览器对于至上而下的理解是有细微差别的,而代码的上下游也就是程序流又对于程序正确至关重要,所以我觉得有必要深入理解多个js块儿的执行顺序。首先得知道有多少方法能把javaScript加入到

LENEL的砖篮 7494

js等待异步执行完再执行_JavaScript 中优雅使用顺序执行异步函数

火于异步1995年,当时最流行的浏览器——网景中开始运行 JavaScript (最初称为 LiveScript)。 1996年,微软发布了 JScript 兼容 JavaScript。随着网景、微软竞争而不断的技术更新,在 2000年前后,JavaScript 相关的技术基础准备就绪。 随后到 2005 年前后,以 Google 为首开始重视使用 AJAX(即 Asynchronous Java...

weixin_39851261的博客 2万+

js在页面上执行顺序

一、js是单线程执行的 二、js顺序执行的 三、代码: 1、index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title>

小乙先生的博客 4109

javaScript js代码执行顺序和键盘捕捉

js代码执行顺序 js代码在浏览器打开的时候就开始自上而下依次执行,所以可能发生js代码已经执行,而标签未执行js代码获取不到标签。 所以我们应该让js代码在所有东西加载完毕的时候执行。 注意:只要是标签中的属性,我们都可以用.来使用。 <body> <script type="text/javascript"> window.onload = function...

OVO_LQ_Start的博客 229

html页面中js执行顺序 (即javaScript执行顺序)

页面中js执行顺序:在页面的head标签中添加一段js代码,在页面的尾部也就是&lt;/body&gt;之前添加一段代码,然后在body的onload事件中引用一个函数,此三者的执行顺序如何? 下面是测试的代码: &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt; &lt;HTML&gt; &...

zwn_software的博客 568

html文件中Js执行顺序解析

html文件中Js执行顺序解析 目录 常规顺序 代码: 控制台输出: 结论:先head代码再body代码 使用休眠时,“并行”还是“串行”处理? 代码 控制台输出: 结论:并行处理 使用jquery时,ready和onload谁先执行? 代码 执行结果: 结论,先ready再onload 使用ifram时,ifram内部js何时执行? 代码 执行结果 结论,ifram内代码在ready后,onload前执行 html文件中js执行顺序js代码位置、是否使用第三方库等因素

BlueSea_W的专栏 2127

JavaScript执行顺序

接触js一段时间以来,觉得只是了解了很浅层的东西。对于很多基础的知识还是很欠缺的。所以开始使用博客来对这一部分的知识做个慢慢的记录和积累。相信积少成多,慢慢的将这一部分的知识攻克!        第一篇记录的不是相关的应用,而是很底层的知识---JavaScript解析引擎。想要了解这一部分的知识也是通过在项目中遇到的问题而联想到的。

庞凡 坚定自己踏实走好每一步 1876

js代码执行顺序简单介绍,jsp中javascript 执行顺序

第一个微任务执行完毕,开始执行第二个宏任务setTimeout,遵循先执行主线程宏任务,再执行微任务process.nextTick,输出2,4,3,5;开始执行第三个宏任务setTimeout,遵循先执行主线程宏任务,再执行微任务,输出9,11,10,12。3、宏任务里如果有宏任务,不会执行里面的那个宏任务,而是被丢进任务队列后面,所以会最后执行。此时,主代码块执行完毕,即第一个宏任务执行完毕,开始执行微任务,输出 6,8;1、微任务是在宏任务的执行中产生的,所以一开始程序执行时是没有微任务的。

wenangou的博客 276

JavaScriptJS执行机制及事件循环详解

JavaScript 是一种单线程语言,即它在同一时间只能执行一个任务。与多线程语言不同,JavaScript执行环境(如浏览器或 Node.js)只有一个主线程用来处理所有任务。这个单线程模型决定了 JavaScript 无法同时处理多个任务,因此需要通过某种机制来处理耗时操作而不阻塞其他任务的执行JavaScript执行机制及事件循环是其处理异步任务的核心。通过理解单线程模型、同步与异步任务、事件循环、宏任务与微任务的执行顺序,开发者可以更高效地编写异步代码,从而提升应用性能与用户体验。

lph159的博客 1235

为什么 JavaScript 代码执行顺序错乱?

JavaScript 是一种单线程语言,也就是说,它一次只能执行一个任务。这是 JavaScript 执行顺序错乱的根本原因之一。虽然 JavaScript 是单线程的,但它通过事件循环(Event Loop)和异步编程,能够在执行一个任务时同时等待其他任务完成,避免阻塞主线程。JavaScript 的代码执行顺序可能让初学者感到困惑,尤其是在涉及异步操作时。理解事件循环执行栈和任务队列的机制,能帮助你更好地掌握代码执行顺序

向着太阳迎着光 1260

JavaScript执行顺序详解

如果说,JavaScript引擎的工作机制比较深奥是因为它属于底层行为,那么JavaScript代码执行顺序就比较形象了,因为我们可以直观感觉到这种执行顺序,当然JavaScript代码的执行顺序是比较复杂的,所以在深入JavaScript语言之前也有必要对其进行剖析。

DaGeger的博客 612

js中如何顺序执行异步任务

现有a、b和c三个任务,如果其为同步任务,可以很简单地顺序执行,但如果其为异步任务,该如何顺序执行呢?

Java_monkey_的博客 6612

JavaScript回调函数执行顺序解析

根据事件循环的执行顺序JavaScript首先执行同步任务,输出“start”和“second”,然后将回调函数添加到任务队列中等待执行。最后,JavaScript执行栈为空时,从任务队列中获取回调函数并将其添加到执行栈中,执行回调函数,输出“first”。回调函数的执行顺序取决于JavaScript事件循环的执行顺序,我们需要了解事件循环的机制和回调函数的注意事项,以保证代码的正确性和可读性。因此,回调函数的执行顺序取决于它何时被添加到任务队列中,并且取决于任务队列中的其他任务何时执行完成。

我点评的博客 915

java校园二手交易平台源码

本系统采用JSP/servlet技术,是使用Java编程语言编写的一套校园网二手交易平台软件。系统采用的是最近几年流行的B/S开发模式,以互联网方式运行,服务器端只需要安装本系统,而客户端用户只要可以上网,就可以非常方便快捷的通过浏览器访问系统,浏览和发布二手交易信息,免去了传统的C/S模式下复杂的安装、配置、维护等操作。同时由于使用面向对象的Java语言,所以本系统也具有Java语言的面向对象、与平台无关、安全性高、稳定性高、多线程等特性,以及Java语言对网络编程技术的支持。使得本系统具有很高的使用价值。系统开发采用了实现MVC模式的Web应用组件:Struts,实现数据持久化功能的ORM组件:Hibernate,用JSP+HTML+JavaScript进行界面处理,数据库采用比较稳定的MySQL 5.0,并用JDBC进行数据库访问。二、注意事项 开发语言:Java 数据库:MySql 数据库:用户名root,密码123456

mzjc_缠论中枢_缠中妙手_缠_缠论_中枢_

无加密,有分笔分段,中枢,高级别{缠论}{N1:110010;N2:110010;DISP:=132}N1:=10;N2:=10;DISP:=2;K:=IF(PERIOD=51{日}IF(PERIOD=61{周}IF(PERIOD=71{月}IF(PERIOD=81{多分钟}IF(PERIOD=91{多日}IF(PERIOD=101{季}

上一篇: JavaScript-执行环境和作用域
下一篇: JS精度问题 0.1+0.2为什么不等于0.3
ForwardGu
博客等级 码龄5年 0粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值