js 同步异步 宏任务微任务,题目加思路

本文详细解析了JavaScript的执行顺序,强调了同步、异步、宏任务和微任务的概念,并通过一个代码示例解释了它们之间的执行流程。同步代码执行完毕后,依次执行微任务和宏任务。在示例中,展示了Promise、setTimeout等如何影响代码的执行顺序。通过理解这一机制,有助于深入掌握JavaScript的异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知js是单线程,所以在执行代码的时候如果全是是同步,代码量又大执行效率就很慢,所以就有了异步代码

异步是在不影响同步代码的情况下运行的代码,如果细分他又有宏任务和微任务

在同步执行完以后第一时间执行微任务,微任务执行完以后去执行宏任务,宏任务执行完后看看是不是又有微任务,如果有就去先执行微任务(这里注意的是我们最开始执行的script就是最开始的宏任务)

执行顺序:同步-》微任务-》宏任务

然后我们看这个代码,会了这个基本就知道执行顺序了

        console.log("aa");
        function workFun(mac) {
            console.log("bb");
            if (mac) {
                console.log(mac);
            }
            return new Promise((resolve, reject) => {
                console.log("cc");
                resolve("dd")
            })
        }
        setTimeout(() => {
            console.log("ee");
            setTimeout(() => {
                console.log("ff");

            }, 0)
            workFun("gg").then(res => {
                console.log('hh', res);
            })
        }, 0)
        workFun().then(res => {
            console.log(res);
        })
        console.log("kk")

第一行是同步输出aa

下面是一个workFun的函数,没调用,跳过,调用再看

一个定时器setTimeout,这个是异步宏任务,后面执行,跳过

下面有调用之前的函数workFun,进入执行,函数同步代码输出 bb

返回的promise内是同步任务,他的resolve是异步微任务,先放着,所以这里输出cc 

最后输出kk,这里同步就输出完了

下面是微任务输出时间 输出刚才的resolve的dd,then就打印出来了,dd

这时候只剩下setTimeout,我们执行setTimeout

第一步输出ee

然后又遇见一个setTimeout,跳过

遇见workFun,注意这里传入gg,代码内部是一个判断输出的,所以这里安装上面的步骤应该输出bb  gg  cc  

然后后面没有代码了,同步执行完成,执行异步微任务 resolve("dd"),.then打印出hh dd

没有微任务了最后我们再执行异步宏任务就是前面的setTimeout,这个setTimeout内部没有其他代码,只有ff,输出打印,代码结束

结果为:

aa          bb          cc          kk          dd          ee          bb          gg          cc          hh dd          ff 

运行代码查看结果

 差不多这样,如果我有错误的地方请指正哦,让我们共同学习,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹏在哪儿呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值