`function` 声明是函数范围的,而 `async function` 声明是块范围的吗?

joe*_*joe 7 javascript scope async-await

下面的代码应该工作吗?

if(true) {
  async function bar() {
    console.log("hello");
  }
}
bar();
Run Code Online (Sandbox Code Playgroud)

Chrome 80 和 Firefox 72 都抛出了未定义的ReferenceError说法bar。所以看起来async function bar() {...}声明是块范围的,而function bar() {...}声明是函数范围的?如果是这种情况,我会感到困惑,但是有人可以通过指向规范相关部分的链接为我确认这一点吗?

另外,有没有办法async function在块内声明时声明函数范围?

Ber*_*rgi 5

似乎async function bar() {...}声明是块范围的

是的,就像平常一样。函数声明通常是块范围的。

...而function bar() {...}声明是函数作用域的?

不是真的,除非出于遗留原因在草率模式下。这不会影响async functionfunction*声明,它不需要任何向后兼容性。