一个例子理解宏任务与微任务
1237 4 1 技术 2021-01-12
众所周知,JavaScript在浏览器上运行机制是单线程的,这是在浏览器发展的初期就决定的特点。就像一个人要起床,刷牙洗脸,出门,这是无法同时进行的,只能按照一定的顺序执行。
假设运行下面的代码:
console.log(1);
setTimeout(() => {
console.log(2);
}, 0);
new Promise(resolve => {
console.log(3);
resolve();
}).then(() => {
console.log(4);
});
console.log(5);
这段代码的所有同步代码会在主线程上执行,形成一个执行栈,执行结果依次打印1、3、5
setTimeout
的结果会创建宏任务插入到宏任务队列,打印2
Promise
的then
的结果会创建微任务插入到微任务队列,打印4
因为单线程的原因,这三个任务会按照 宏任务->微任务 顺序执行,而Promise
的then
会在当前宏任务的结束后紧跟着执行,所以最终打印顺序为1、3、5、4、2。
看了之后觉得有些模糊,查找一番后找到了一张图认为概括的很清晰:https://segmentfault.com/img/bVcZ9MV/view
2022-11-06 23:04
谢谢大佬!!!