Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is `async` not a a reserved word?

Tags:

As far as I can tell, both the spec and the documentation have await as the only reserved keyword out of the async/await feature.

This is further demonstrated by the fact that we can name a variable async:

For example:

var async = 5;
console.log(async) // this is fine

Node (6.10) (also on Repl.it)

Node

Chrome (59)

Chrome

Firefox (54)

Firefox

Is it because of backwards compatibility? I'd guess many codebases would use the name async for certain features.

This allows for some strange looking code examples:

async function async() {
  var async = 5;
  await async;
  return async;
}
async().then(console.log)

Infinite recursive promise chain? (Not really important since any function name would allow this, however this code looks additionally confusing)

async function async() {
  await async();
}
// stackoverflow (might need to open your console to see the output)