avatar

js eventLoop事件执行顺序

笔试题

下面有四道题目

第一题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
setTimeout(() => {
console.log(4);
}, 0);

new Promise(resolve=>{
console.log(1);
for(let i =0;i<10000;i++){
i == 9999 && resolve();
}
console.log(2)
}).then(()=>{
console.log(5)
})

console.log(3)

//答案 1, 2, 3 5 4

第二题

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
console.log('A');

setTimeout(()=>console.log('B'),1000)

const start = new Date()

while(new Date()-start<3000){}

console.log('C')

setTimeout(()=>console.log('D'),0)

new Promise((resolve,reject)=>{
console.log('EEE');
foo.bar(100)
}).then(()=>console.log('F'))
.then(()=>console.log('G'))
.catch(()=>console.log('H'))
console.log('I')

// 答案
// A
// C
// EEE
// I
// H
// B
// D

第三题

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
console.log(1);
setTimeout(() => {
console.log(2);
new Promise(resolve => {
console.log(3);
setTimeout(() => console.log(4), 0); //宏
for (let i = 1; i < 1000; i++) {
resolve();
}
console.log(5);
})
.then(() => {
setTimeout(() => console.log(12), 0); //宏
console.log(11);
});

console.log(6);

setTimeout(() => {
console.log(7); //宏
}, 0);

}, 0);

Promise.resolve().then(() => {
console.log(8);
});

setTimeout(() => {
console.log(10);
},0);

// 答案
// 1
// 8
// 2
// 3
// 5
// 6
// 10
// 11
// 4
// 7
// 12

第四题

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
setTimeout(()=>{
console.log('0')
})

new Promise((resolve,reject)=>{
console.log('1')
resolve();
}).then(()=>{
console.log('2')
new Promise((resolve,reject)=>{
console.log('3')
resolve()
}).then(()=>{
console.log('4')
}).then(()=>{
console.log('5')
}).then(()=>{
console.log('13')
})
}).then(()=>{
console.log('6')
}).then(()=>{
console.log('11')
})

new Promise((resolve,reject)=>{
console.log('7')
resolve()
}).then(()=>{
console.log('8')
})
.then(()=>{
console.log('12')
})

// 答案 层数代表then的位置

// 1
// 7
// 第一层
// 2
// 3
// 第一层
// 8
// 第1层
// 4
// 第2层
// 6
// 第2层
// 12
// 第2层
// 5
// 第3层
// 11
// 第3层
// 13
// 0
文章作者: 张复明
文章鏈接: https://hexo.zhangaming.com/2020/09/16/js-event-loop/
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 阿明的博客
打賞
  • 微信
    微信
  • 支付寶
    支付寶

評論