Синтаксис оператора выражения
ExpressionStatement [Yield, Await] :
[lookahead ∉ { {, function, async [не LineTerminator здесь] function, class, let [ }] Expression [+In, ?Yield, ?Await] ;
ExpressionStatement не может начинаться с левой фигурной скобки { U+007B (LEFT CURLY BRACKET), потому что это может сделать его неоднозначным с производством блока Block.
ExpressionStatement не может начинаться с ключевых слов function или class (функции или класса), потому что это сделало бы его неоднозначным с FunctionDeclaration, GeneratorDeclaration или ClassDeclaration.
ExpressionStatement не может начинаться с async function (асинхронной функции), потому что это сделало бы его неоднозначным с AsyncFunctionDeclaration или AsyncGeneratorDeclaration.
ExpressionStatement не может начинаться с последовательности из двух токенов let [, потому что это сделало бы его неоднозначным с let LexicalDeclaration, первая LexicalBinding которой была ArrayBindingPattern.
14.5.1 Семантика времени выполнения: Оценка
ExpressionStatement : Expression ;
1. Пусть exprRef будет результатом вычисления Expression. 2. Вернуть ? GetValue(exprRef).
Информационные ссылки
Стандарт ECMAScript — Раздел «14.5 Expression Statement» — https://tc39.es/ecma262/#sec-expression-statement