Why are await and async valid variable names? : <p>I was experimenting with how <code>/</code> is interpreted when around different keywords and operators, and found that the following syntax is perfectly legal:</p>

<p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-js lang-js prettyprint-override"><code>// awaiting something that isn't a Promise is fine, it's just strange to do:
const foo = await /barbaz/
myFn()</code></pre>
</div>
</div>
</p>

<p>Error:</p>

<blockquote>
  <p>Uncaught ReferenceError: await is not defined</p>
</blockquote>

<p>It looks like it tries to parse the <code>await</code> as a <em>variable name</em>..? I was expecting</p>

<blockquote>
  <p>await is only valid in async function</p>
</blockquote>

<p>or maybe something like</p>

<blockquote>
  <p>Unexpected token await</p>
</blockquote>

<p>To my horror, you can even assign things to it:</p>

<p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-js lang-js prettyprint-override"><code>const await = 'Wait, this actually works?';
console.log(await);</code></pre>
</div>
</div>
</p>

<p>Shouldn't something so obviously wrong cause a syntax error, as it does with <code>let</code>, <code>finally</code>, <code>break</code>, etc? Why is this allowed, and what the heck is going on in the first snippet?</p>
