【web前端面试必问3】什么叫宏任务?什么叫微任务?

本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我。

如果看懂了,请点击收藏,方便下次再来看,等你完全明白了在取消收藏。

javascript是一门单线程语言,所以javascript是按语句的执行顺序执行的。

你说执行就执行吧,还非要搞个专有名词,叫什么同步任务,异步任务。

同步任务:就是先执行得大任务。比如画画,先画轮廓。这里得同步任务就是轮廓先画。服务器渲染时候先渲染整个页面得轮廓。如果某个局部比如图片加载过多复杂就暂时不加载,先跳过去。

异步任务:就是后执行得小任务。比如画画得局部细节。这里就是刚才跳过去得图片等负载得加载内容。

 

 这样说不就理解了吗,还非要搞个转有名词啥同步异步,真是够麻烦得...........

 好了理解了,同步任务和异步任务后,那么再看一下js代码执行得逻辑。

首先我们知道js代码是一行一行执行的对吧,那么我们来看一下下面的这个代码控制台输出结果的顺序

var a = 1
console.log(a)
var b = 2
console.log(b)

这个谁都知道呀,js代码是一行一行执行的,肯定是先输出1,然后是2

那么恭喜你答对了。你肯定觉得你理解了是吧,好,接下来我们来看下面这个代码

那么这个对应控制台输出的结果顺序是啥呢?

有人说这不小意思嘛,刚才已经说了js的代码逻辑是一行一行执行,所以这个控制台结果是

//setTimeout
//promise
//then
//console

那么我就恭喜你..........................................................................答错了!

不是一行一行执行的吗?为什么会错?哈哈骚年不要急,继续看下去

没错js逻辑代码的确是一行一行执行的,接下来如果直接讲可能会听不懂。我们举个例子

 js在执行代码的时候先得顺序是

先执行 A

再执行B

再执行C

然后这个 ABC就被称为是所谓得宏任务。

当然,如果ABC中出现比如:setTimeout() 函数要放到一个地方,等会在执行。这个地方叫下一个循环的 MacroTask Queue 宏任务队列 。

那么现在你懂了吧?

那么我们来测试一下看你掌握的情况

console.log('1');
setTimeout(function() {
    console.log('2');
    process.nextTick(function() {
        console.log('3');
    })
    new Promise(function(resolve) {
        console.log('4');
        resolve();
    }).then(function() {
        console.log('5')
    })
})
process.nextTick(function() {
    console.log('6');
})
new Promise(function(resolve) {
    console.log('7');
    resolve();
}).then(function() {
    console.log('8')
})
setTimeout(function() {
    console.log('9');
    process.nextTick(function() {
        console.log('10');
    })
    new Promise(function(resolve) {
        console.log('11');
        resolve();
    }).then(function() {
        console.log('12')
    })
})

如果单一的只有一个宏任务:宏任务执行完>执行这轮微任务

如果有连个宏任务是并排的关系,则先执行完完整的任务----即执行完这个任务的宏、微任务,然后再去执行并排关系的另一个完整的宏任务。

如果你能看懂我的这张图的内容,那么我就可以告诉你,你完全懂得了宏任务和微任务了。

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

studyer网

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

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

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

打赏作者

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

抵扣说明:

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

余额充值