宏任务微任务

  • 由宿主环境发起的是宏任务,WEBAPI
  • 由自身发起的是微任务,Promise.then,异步要执行的任务和js处于同一进程,和js相关的 属于微任务
  • 说到宏任务微任务,就要先提起同步任务和异步任务,因为js是单线程的,js的代码是一个个按顺序执行的。如果一个任务的耗时过长,那么后边的任务就必须要等着,这就造成了后面的内容加载的很慢。就在此基础上,我们把任务分成了两类,即同步任务和异步任务。
  • 在打开网站的时候,就会先开始渲染一堆的同步任务,让同步任务和异步任务各自进入不同的场所执行,同步的进入主线程,异步的进入event Table并注册函数。当指定的事情完成时,Event Table会将这个函数移入Event Queue。主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。上述过程会不断重复,也就是常说的Event Loop(事件循环)。
  • 事件循环的顺序,决定js代码的执行顺序。进入整体代码(宏任务)后,开启第一次循环,执行所有的微任务,然后再从宏任务开始,找到其中一个队列执行完毕,再执行所有的微任务。
  • 同步代码 ->微任务 ->宏任务 ->微任务
  • 微任务:promise.then
  •  
    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')
        })
    })
    
    作者:ssssyoki
    链接:https://juejin.cn/post/6844903512845860872
    来源:稀土掘金
    完整的输出为1,7,6,8,2,4,3,5,9,11,10,12

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值