MST

星途 面试题库

面试题:JavaScript 异步环境中赋值操作符的边界特性

考虑如下代码: ```javascript async function asyncTest() { let value = 0; Promise.resolve().then(() => { value = 1; }); await Promise.resolve(); return value; } asyncTest().then(result => { console.log(result); }); ``` 请分析代码输出结果,并详细阐述赋值操作符 `=` 在这个异步环境中遇到了哪些边界条件,以及为什么会出现这样的结果。
37.0万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 代码输出结果
    • 代码输出结果为 0
  2. 赋值操作符=在异步环境中的边界条件及原因
    • 首先,asyncTest函数内部,let value = 0;初始化了变量value0
    • 然后,Promise.resolve().then(() => { value = 1; });这部分代码创建了一个微任务,该微任务会在当前调用栈清空后,下一个事件循环的微任务队列中执行。
    • 接着,await Promise.resolve();这行代码暂停asyncTest函数的执行,直到Promise.resolve()被解决(在这种情况下它已经被解决),然后恢复函数执行并返回Promise.resolve()的结果(这里是undefined)。
    • 由于await暂停函数执行,它后面的代码会被放到一个新的微任务中,这个微任务会在当前调用栈清空后,并且在前面Promise.resolve().then(() => { value = 1; });这个微任务之后执行。
    • asyncTest函数恢复执行并返回value时,Promise.resolve().then(() => { value = 1; });这个微任务还没有执行,所以value仍然是初始值0。因此最终asyncTest().then(result => { console.log(result); });输出的是0