共计 字 • 阅读约
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