JS是单线程的,所以意味着执行任务的时候需要排队,如果前一个任务的耗时长,那么就会发生堵塞。为此,JS出现了同步任务和异步任务。这两种任务都是需要在主线程中执行的,但是异步任务会被放在队列中进行排队执行。
执行顺序:同步任务>微任务>宏任务
注意:当微任务列表执行完毕后才会执行宏任务
常见的宏任务:
- 新程序或子程序直接被执行
- 事件的回调函数
- setTimeout() 和 setInterval()
常见的微任务:
- Promise.then().catch().finally()
- MutationObserver
- Object.abserve
测试代码如下:
<script>
console.log('1');
setTimeout(function(){
console.log('2');
},0);
Promise.resolve().then(()=>{
console.log('3');
});
console.log('4');
Promise.resolve().then(()=>{
console.log('5');
});
setTimeout(function(){
console.log('6');
},0);
console.log('7');
Promise.resolve().then(()=>{
console.log('8');
});
</script>
输出结果: