Объявления `function` являются областью видимости функции, но объявления` asyn c function` являются областью видимости блока? - PullRequest
6 голосов
/ 24 февраля 2020

Должен ли работать следующий код?

if(true) {
  async function bar() {
    console.log("hello");
  }
}
bar();

Chrome 80 и Firefox 72, оба выдают ReferenceError, говоря, что bar не определено. Таким образом, кажется, что async function bar() {...} объявления являются областью действия блока, тогда как function bar() {...} объявления являются областью действия функции? Смущает, если это так, но может ли кто-нибудь просто подтвердить это со мной ссылкой на соответствующую часть спецификации c?

Кроме того, есть ли способ сделать объявление функции async function в области видимости? когда объявлено изнутри блока?

1 Ответ

4 голосов
/ 24 февраля 2020

Кажется, что async function bar() {...} объявления имеют объемную область

Да, как обычно. Объявления функций в общем случае ограничены блоками.

… тогда как объявления function bar() {...} являются областями функций?

Не совсем, за исключением небрежного режима по устаревшим причинам . Это не влияет на объявления async function и function*, которые не нуждаются в обратной совместимости.

...