`function` declarations are function scoped, but `async function` declarations are block scoped?

joe :

Should the following code work?

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

Chrome 80 and Firefox 72 both throw a ReferenceError saying bar is not defined. So it seems like async function bar() {...} declarations are block scoped whereas function bar() {...} declarations are function scoped? Confusing if that's the case, but can someone just confirm that for me with a link to the relevant part of the spec?

Also, is there a way to make an async function declaration function-scoped when declared from within a block?

Bergi :

It seems like async function bar() {...} declarations are block scoped

Yes, just like normal. Function declarations are block-scoped in general.

… whereas function bar() {...} declarations are function scoped?

Not really, except in sloppy mode for legacy reasons. This does not affect async function and function* declarations, which don't need any backwards-compatibility.

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=6924&siteId=1