在线学习Node.js——Day4

啊,昨天作业嘎嘎多,就没更新,下周要开始期中考了,可是我害没有解除隔离,呜呜呜呜呜


宏任务与微任务

前置概念

JS是单线程的,它的运行是基于事件循环机制 (event loop)

        - 调用栈

                - 栈

                        栈是一种数据结构,后进先出

                - 调用栈中,放到是要执行的代码

        - 任务队列

                - 队列

                        - 队列是一种数据结构,先进先出

                        - 任务队列的是将要执行的代码

                        - 当调用栈中的代码执行完毕后,队列中的代码还会按照顺序依次进入到栈中执行(在栈中执行完一个再进去一个)

                        - 在JS当中任务队列有两种

                                - 宏任务队列 (大部分代码)

                                - 微任务队列  (Promise的回调函数(then、catch、finally)) VIP快速通道

                                        - 为了更合理的处理异步任务,ES标准规定了一个内部的队列“PromiseJobs”,这个队列是专门用来放置由Promise产生的回调函数的(then、catch、finally),这个队列我们通常被称为“微任务队列(microtask queue)”

                                     

        - 整个流程

                1、执行调用栈中的代码

                2、执行微任务队列中的所有任务

                3、执行宏任务队列中的所有任务

                queueMicrotask() 用来向微任务中添加一个任务

Promise的执行原理

        - promise在执行,then就是相当于给Promise绑定了回调函数(事件)

                当Promise的状态从pending变为fulfilled时

                        then的回调函数会被放入到任务队列中

开整

下列的哪个先出结果捏!

1、康康它

setTimeout(() => {
    console.log(1)
},0)

console.log(2);

结果:2 1

分析一下下:

        首先,setTimeout,开启了一个定时器,作用是间隔一段时间后,将函数放入到任务队列

        然后,console.log( ),写在了全局作用域里,写在全局作用域里的代码,一上来就直接是在调用栈里的

        所以!先2,再1

2、再来一个嗷!

setTimeout(()=>{
    console.log(1)
})

Promise.resolve().then(() => {
    console.log(2)
})

结果:2 1

再分析一下下:

        因为setTimeout和then虽然都将函数放入到队列中,但是却不是同一个队列,前文我们已经提到了, Promise的回调函数(then、catch、finally)走的是 VIP快速通道

        setTimeout 进入宏任务队列,then进入到的是微任务队列

        所以!先2,再1

3、再再来一个嗷~ 桀桀桀!

console.log(1);

setTimeout(() => console.log(2));

Promise.resolve().then(() => console.log(3));

Promise.resolve().then(() => setTimeout(() => console.log(4)));

Promise.resolve().then(() => console.log(5));

setTimeout(() => console.log(6));

console.log(7);

结果:1 7 3 5 2 6 4

        桀桀桀!除了咱的任务栈里,宏任务微任务之外,代码都是自上而下的捏!


今天就只看了看这个,啊!周中果然没有特别多的空闲时间,希望这周末可以把node的基础学完

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值