js中的宏任务与微任务

js中的宏任务与微任务 (只在浏览器中支持的,不包括node)

宏任务里面放的有 :
setTimeout 定时器
setInterval 计时器
requestAnimationFrame web中写动画的另一种方式

微任务里面放的有:
promise.then catch finally Promise里面的方法(这里不包括new Promise)
MutationObserver 监视DOM发生改变

在这里插入图片描述

先来一个小例子   
setTimeout(() => {    //执行后 回调一个宏事件            
    console.log('1')
}, 0)
console.log('2');
new Promise((resolve) => {
    console.log('3');
    resolve()
}).then(() => {
    console.log('4');
}).then(()=>{
    console.log('5')
})

1.只要遇到宏任务(setTimeout),我们直接把他放到最后执行。
2.开始执行外边的主线程console.log()3.遇到微任务(Promise)(new Promise)直接执行。.then被分配到Event Queue中
4.第一轮执行 ,打印了  2   3   4   55.第二轮开始执行宏任务里面的   打印了 1

宏任务与微任务之间的关系

在这里插入图片描述

1.先在代码中看看有没有微任务,执行完全部微任务。
2.在执行一个宏任务,看看里面有没有微任务执行完里面的微任务,在执行里面的宏任务。
3.当前宏任务里面的内容执行完后,在执行下一个宏任务。

在来一个例子                   
setTimeout(function() {
    console.log('1');
    new Promise(function(resolve) {
        console.log('2');
        resolve();
    }).then(function() {
        console.log('3')
    })
})
new Promise(function(resolve) {
    console.log('4');
    resolve();
}).then(function() {
    console.log('5')
})
console.log('6');
setTimeout(function() {
    console.log('7');
    new Promise(function(resolve) {
        console.log('8');
        resolve();
    }).then(function() {
        console.log('9')
    })
})

     答案:4  6   5   1   2   3   7    8    9

    1.new Promise不是微任务,里面的方法是微任务。所以执行new Promise     打印出来 4
    2.然后console.log   打印   6
    3.然后执行微任务  Promise里面的方法  打印出来  5
    4.开始执行第一个宏任务, 先console.log  打印1  在继续打印  23
    5.执行完里面的全部任务,在执行下一个宏任务,继续打印 7   8   9
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值