JS 宏任务_微任务

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

// 会先执行 主线程(同步任务)上面的任务 然后再执行(异步任务)上面的微任务 再执行(异步任务)宏任务
// 1 7 是(异步任务)宏任务 <3>
// 2 4 5 10 8 9 是主线程(同步任务) <1>
// 3 6 是微任务 (同步任务里面的微任务) <2>
// 所有最终结果是
// 2,4,5,10,8,9,3,6,1,7

微任务
process.nextTick
MutationObserver
Promise.then catch finally
async await 中await执行完后后面的代码也是微任务
宏任务
I/O
setTimeout
setInterval
setImmediate
requestAnimationFrame

补充:
事件循环分为 同步任务 和 异步任务
会先执行同步任务 ,再执行异步任务
异步任务分为 宏任务 和 微任务
优先执行微任务再执行宏任务
会先执行 主线程(同步任务)上面的任务 然后再执行(异步任务)上面的微任务 再执行(异步任务)宏任务

async function async1() {
    console.log('async1 start')
    await async2()
    console.log('async1 end')
}
async function async2() {
    console.log('async2')
}
console.log('script start')
setTimeout(function () {
    console.log('settimeout')
})
async1()
new Promise(function (resolve) {
    console.log('promise1')
    resolve()
}).then(function () {
    console.log('promise2')
})
console.log('script end')
// async await 中await执行完后后面的代码也是微任务
// 打印结果为
// script start
// async1 start
// async2
// promise1
// script end
// async1 end
// promise2
// settimeout
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值