// 题目
try {
let a = 0
;(async function() {
a += 1
console.log('inner', a)
throw new Error('123')
// a()
})()
console.log('outer', a)
} catch(e) {
console.warn('Error', e)
}
// 这道题目是昨天题目的演化版,更有趣了,当然本质是一样的,我们就当巩固了。
// 问题是输出顺序是什么,为什么会这样?
// 再加个问题,async 是返回一个 Promise 对象,为啥函数体内的抛错能被返回的 Promise 捕获到。
// 这道题目基础不好的同学容易答错,很容易以为 async 的函数内部代码就是异步的,实际都还是同步的,把代码改成这样大家就明白了:\
function a() {
return new Promise(function(resolve, reject) {
a += 1
console.log('inner', a)
throw new Error('123')
})
}
https://github.com/KieSun/fucking-frontend/issues/2#issuecomment-793266365