编辑代码

// 题目
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