var a = 0
var b = () => {
var temp = a;
Promise.resolve(10)
.then((r) => {
a = temp + r;
})
.then(() => {
console.log('2', a)
})
}
b()
a++
console.log('1', a)
我尝试以下代码片段,按照您这样模拟是行不通的,不太理解为什么我这样写async里面输出就是 11:
let a = 0
let b = async () => {
let c = await 10
a = a + c
console.log('2', a) // 2 11
}
b()
a++
console.log('1', a) // 1 1
上面说了执行到 await 的时候会保留 堆栈中的东西,这个时候变量a并没有使用,所以并没有保留 a = 0;当 await 结束后,再使用变量a,此时a的值经过 a++ 已经变成了 1 了。所以最后输出的是11。
第 12 题:JS 异步解决方案的发展历程以及优缺点