-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path09_JS执行顺序(宏任务与微任务).html
More file actions
74 lines (55 loc) · 1.42 KB
/
Copy path09_JS执行顺序(宏任务与微任务).html
File metadata and controls
74 lines (55 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!--
宏任务 包含1个或多个 微任务
宏任务有优先级,微任务没有,它只能按顺序调用
JS执行逻辑:
一个宏任务中的微观任务全部执行完毕后再才执行下一个宏任务
setTimeout 会生成新的宏任务
DOM事件 会生成宏任务
Promise 会生成微任务
-->
<script>
console.log(1);
async function test(){
console.log(2);
await new Promise((resolve) => {
console.log(3);
resolve();
}).then(() => {
console.log(4);
})
console.log(4.1);
}
setTimeout(() => {
console.log(5);
new Promise((resolve) => {
console.log(5.1);
resolve();
}).then(() => {
console.log(5.2);
})
console.log(5.3);
}, 0);
new Promise((resolve) => {
console.log(6);
resolve();
}).then(()=>{
console.log(7);
});
console.log(8);
test();
// --- 宏任务1
// 1,6,8,2 同步代码
// 3 微任务
// 7 微任务
// 4,4.1 微任务
// --- 宏任务2
// 5,5.1,5.3 同步代码
// 5.2 微任务
// #### 最终执行顺序
// 1, 6, 8, 2, 3, 7, 4, 4.1, 5, 5.1, 5.3, 5.2
// 执行优先级:
// 默认第一个宏任务 -> 所有同步代码 -> 所有微任务 -> 下一个宏任务 -> (如此循环...)
// 注意点:
// 1、Promise里面默认是直接执行的,属于同步代码
// 2、Promise的 then 里面是异步回调的,属于微任务
</script>