全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 20 道配套习题

JS 异步编程入门

专题说明

本专题系统讲解JavaScript异步编程入门知识,涵盖回调函数概念、Promise对象创建与使用、async/await语法糖、事件循环机制、微任务与宏任务优先级等内容,帮助理解JavaScript单线程异步执行的原理。

学习目标

  1. 理解回调函数的概念与应用场景
  2. 掌握Promise的三种状态与状态不可逆特性
  3. 学会Promise链式调用与错误处理
  4. 掌握async/await语法与try-catch错误处理
  5. 理解async/await与Promise的关系
  6. 掌握事件循环的基本执行流程
  7. 区分微任务与宏任务及执行优先级
  8. 学会分析异步代码的执行顺序

学习内容

本专题涵盖以下核心知识点:

  • 回调函数:回调函数定义、同步回调与异步回调、应用场景
  • Promise:三种状态、状态不可逆、链式调用、Promise.all、错误处理
  • async/await:async函数声明、await等待Promise、try-catch错误处理、与Promise的关系
  • 事件循环:单线程执行、调用栈与任务队列、执行流程
  • 微任务与宏任务:微任务来源、宏任务来源、执行优先级、执行顺序分析

学习建议

  1. 理解JavaScript单线程异步执行的原理
  2. Promise状态只能改变一次,理解状态不可逆特性
  3. async函数总是返回Promise,await等待Promise完成
  4. Promise.then回调是微任务,setTimeout回调是宏任务
  5. 微任务优先级高于宏任务,在每个宏任务后清空微任务队列
  6. 练习分析异步代码执行顺序,掌握事件循环机制
  7. 注意setTimeout最小延迟4ms,不是立即执行

📝 配套习题(20 题)

💡 参考答案在文末
判断题
1

回调函数是指将一个函数作为参数传递给另一个函数,并在特定时机被调用的函数。

A

B

2

微任务会在当前宏任务执行完毕后立即执行,在下一个宏任务开始之前。

A

B

3

JavaScript的事件循环在单线程中运行,通过任务队列实现异步操作的非阻塞执行。

A

B

单选题
4

async函数中await的Promise失败时,应该如何处理错误?

A

使用.catch()方法

B

使用try-catch语句

C

使用.then()的第二个参数

D

错误会自动消失

5

以下哪个属于微任务(Microtask)?

A

setTimeout的回调

B

setInterval的回调

C

Promise.then的回调

D

DOM事件回调

6

以下关于回调函数的说法,正确的是:

A

回调函数必须是匿名函数

B

回调函数只能用于异步操作

C

回调函数是作为参数传递给其他函数的函数

D

回调函数必须有返回值

7

分析以下代码的输出顺序:

JavaScript
console.log('start');
setTimeout(() => {
  console.log('timeout');
  Promise.resolve().then(() => console.log('promise1'));
}, 0);
Promise.resolve().then(() => {
  console.log('promise2');
  Promise.resolve().then(() => console.log('promise3'));
});
console.log('end');
A

start, end, promise2, promise3, timeout, promise1

B

start, end, promise2, timeout, promise3, promise1

C

start, end, timeout, promise2, promise3, promise1

D

start, end, promise2, promise1, promise3, timeout

8

async关键字用于声明异步函数,以下正确的async函数声明是:

A

async function myFunc() {}

B

function async myFunc() {}

C

myFunc async function() {}

D

function myFunc() async {}

9

await关键字的作用是:

A

创建一个新的Promise

B

等待Promise完成并获取其结果

C

将同步函数转为异步函数

D

取消Promise的执行

10

async函数的返回值特点:

A

返回普通值,不是Promise

B

总是返回一个Promise对象

C

只有错误时返回Promise

D

必须显式返回Promise

11

以下关于Promise状态的描述,正确的是:

A

Promise状态可以多次改变

B

Promise只能从Pending变为Fulfilled

C

Promise状态一旦确定就不可再改变

D

Promise总是从Rejected变为Fulfilled

12

分析以下代码的输出顺序:

JavaScript
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');
A

1, 2, 3, 4

B

1, 4, 2, 3

C

1, 4, 3, 2

D

1, 3, 4, 2

13

Promise的.then()方法中的回调函数在事件循环中被归类为:

A

同步任务

B

宏任务

C

微任务

D

延迟任务

14

JavaScript事件循环(Event Loop)的主要作用是:

A

创建新的线程执行任务

B

监控和调度异步任务的执行

C

替代所有回调函数

D

同步执行所有代码

15

事件循环中,微任务和宏任务的执行顺序是:

A

宏任务优先于微任务

B

微任务优先于宏任务

C

按添加顺序依次执行

D

随机执行

16

Promise是JavaScript中用于处理异步操作的对象,它有几种可能的状态?

A

2种

B

3种

C

4种

D

5种

多选题
17

async函数中遇到await时,会发生:

A

async函数暂停执行,等待Promise完成

B

函数外的同步代码继续执行

C

await后面的代码作为微任务排队

D

await后面的代码作为宏任务排队

18

async/await与Promise的关系是:

A

async/await是Promise的语法糖

B

async函数返回Promise

C

await等待Promise完成

D

async/await可以替代所有Promise用法

19

Promise中处理错误的方式包括:

A

使用.catch()方法

B

使用.then()的第二个参数

C

使用try-catch包裹Promise构造

D

在.then链末尾添加.catch

20

以下关于Promise.all()的正确描述有:

A

所有Promise都成功才返回成功

B

任一Promise失败则立即返回失败

C

返回结果按传入顺序排列

D

空数组传入直接返回成功

参考答案
1.正确 2.正确 3.正确 4.B 5.C 6.C 7.A 8.A 9.B 10.B 11.C 12.C 13.C 14.B 15.B 16.B 17.A;B;C 18.A;B;C 19.A;B;D 20.A;B;C;D
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 JS 对象与数组
下一个专题 → JS 异步进阶与并发控制
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码