10
Peter谭老师发布于 今天 01:00
function app() {
setTimeout(() => {
console.log("1-1");
Promise.resolve().then(() => {
console.log("2-1");
});
});
console.log("1-2");
Promise.resolve().then(() => {
console.log("1-3");
setTimeout(() => {
console.log("3-1");
});
});
}
app();
1-2
1-3
1-1
2-1
3-1
大部分面试官其实自己也不懂什么是微任务和宏任务,不信下次你们反问一下
Promise
相关任务,MutationObserver
等(一样,只是一种称呼而已!!!
) function app() {
setTimeout(() => {
console.log("1-1");
Promise.resolve().then(() => {
console.log("2-1");
});
});
console.log("1-2");
Promise.resolve().then(() => {
console.log("1-3");
setTimeout(() => {
console.log("3-1");
});
});
}
app();
console.log("1-2");
的时候,意味着全局的上下文马上要退出了,因为此时全局的同步代码都执行完了,剩下的都是异步代码不理解层级,可以先不管,后面会讲
),微任务永远比宏任务先执行1-3
,再打印1-1
func1和func2
就属于同层级任务setTimeout(func1)...
Promise.resolve().then(func2)...
fn1和fn2
就不属于同一个层级的,因为fn2属于内部这个setTimeout
的微任务队列,而fn1
属于外部setTimeout
的微任务队列setTimeout(()=>{
Promise.resolve().then(fn1)
setTimeout(()=>{
Promise.resolve().then(fn2)
})})
划重点:每个宏任务对应一个单独的微任务队列
阅读 303发布于 今天 01:00
赞10收藏4