面试题答案
一键面试- 代码输出结果:
- 代码输出结果为
0
。
- 代码输出结果为
- 赋值操作符
=
在异步环境中的边界条件及原因:- 首先,
asyncTest
函数内部,let value = 0;
初始化了变量value
为0
。 - 然后,
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
。
- 首先,