宏任务、微任务

宏任务:setTimeout,setInterval,DOM事件,AJAX请求

微任务:Promise,asyc/await

 

 1 //主线程直接执行
 2 console.log('1');
 3 //丢到宏事件队列中
 4 setTimeout(function() {
 5     console.log('2');
 6     process.nextTick(function() {
 7         console.log('3');
 8     })
 9     new Promise(function(resolve) {
10         console.log('4');
11         resolve();
12     }).then(function() {
13         console.log('5')
14     })
15 })
16 //微事件1
17 process.nextTick(function() {
18     console.log('6');
19 })
20 //主线程直接执行
21 new Promise(function(resolve) {
22     console.log('7');
23     resolve();
24 }).then(function() {
25     //微事件2
26     console.log('8')
27 })
28 //丢到宏事件队列中
29 setTimeout(function() {
30     console.log('9');
31     process.nextTick(function() {
32         console.log('10');
33     })
34     new Promise(function(resolve) {
35         console.log('11');
36         resolve();
37     }).then(function() {
38         console.log('12')
39     })
40 })

执行此代码后控制台依次输出1 7 6 8 2 4 3 5 9 11 10 12。JS是单线程执行的机制,执行主线程,然后在宏任务队列中取出一个宏任务执行,执行后继续执行此宏任务内部的微任务。等内部所有微任务执行完之后,再回到宏任务队列取出第二个宏任务,周而复始地执行下去。

本文部分内容转自https://www.cnblogs.com/wangziye/p/9566454.html

posted @ 2022-02-20 23:30  给我一个debug  阅读(49)  评论(0)    收藏  举报