题目描述
JS宏任务微任务的执行顺序为什么是这样的
题目来源及自己的思路
js执行顺序问题
相关代码
console.log(1);
setTimeout(() => {
console.log(2);
Promise.resolve().then(() => {
console.log(3)
});
});
new Promise((resolve, reject) => {
console.log(4)
resolve(5)
}).then((data) => {
console.log(data);
Promise.resolve().then(() => {
console.log(6)
}).then(() => {
console.log(7)
setTimeout(() => {
console.log(8)
}, 0);
});
})
setTimeout(() => {
console.log(9);
})
console.log(10);
// 请把代码文本粘贴到下方(请勿用图片代替代码)
你期待的结果是什么?实际看到的错误信息又是什么?
结果是这样的, 1 4 10 5 6 7 2 3 9 8
大佬们给我解释一下为什么是这样呢???
建议先简单了解下JS异步代码的运行原理,包括:
进程与线程
JavaScirpt是单线程的
执行栈
浏览器中的 Event Loop
常见的宏任务有:
script
定时器:setTimeout,setInterval,setImmediate
I/O
UI渲染
常见的微任务有:
Promise
MutationObserver
Node中的process.nextTick
回到上述代码,执行顺序如下:
Promise的创建也属于同步代码
,打印 1 4 10