共计 字 • 阅读约 min

优先级

console.log('我是同步任务')

const t1 = Date.now()

const a = new Promise(function promise(resolve, reject) {
    setTimeout(() => {
        resolve(1)
    });
})

setTimeout(function timeout() {
    console.log("我是宏任务1");
}, 0);
a.then(function () {
    console.log('我是微任务1');
})
setTimeout(function timeout() {
    console.log("我是宏任务2");
}, 0);

a.then(function () {
    console.log('我是微任务2');
}).then(function () {
    for (let i = 0; i < 1000000000; i++) { }
    console.log('我是微任务3,我阻塞了宏任务', Date.now() - t1);
})

// 结果

// 我是同步任务
// 我是微任务1
// 我是微任务2
// 我是微任务3, 我阻塞了宏任务 715
// 我是宏任务1
// 我是宏任务2

由此可以看出调度的优先级: 同步任务 > 微任务 > 宏任务

微任务

微任务,microtask,也叫 jobs

会在执行栈为空时,一次行全部执行

宏任务

宏任务,macrotask,也叫 tasks。

每一次事件循环只执行一个

event loop 图解



文章更新于: 2022-3-11 15:53:53