all-of-frontend/Answer/1 ~ 10/2.md

33 lines
876 B
Markdown
Raw Permalink Normal View History

2021-03-10 07:42:26 +08:00
```js
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` 的函数内部代码就是异步的,实际都还是同步的,把代码改成这样大家就明白了:
```js
function a() {
return new Promise(function(resolve, reject) {
a += 1
console.log('inner', a)
throw new Error('123')
})
}
```
另外发现还有同学疑问为什么 `throw` 出去的错误被 `promise catch` 住了,这个我们直接看标准:
[标准具体地址](https://tc39.es/ecma262/#sec-control-abstraction-objects)
[这里也有一个不错的作答](https://github.com/KieSun/fucking-frontend/issues/2#issuecomment-793266365)