Почему var i = 15,4; генерирует ошибку? Ведь сначала должно присваивание выполнится, а затем оператор , вернет 4. Или как это работает? Может , не является оператором в данном контексте? Объясните пожалуйста.
Обратимся к спецификации. Синтаксис использования var, следующий:
VariableStatement[Yield, Await]:
var VariableDeclarationList[+In, ?Yield, ?Await];
VariableDeclarationList[In, Yield, Await]:
VariableDeclaration[?In, ?Yield, ?Await]
VariableDeclarationList[?In, ?Yield, ?Await] , VariableDeclaration[?In, ?Yield, ?Await]
VariableDeclaration[In, Yield, Await]:
BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await] opt
BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]
Отсюда видно, что в данном случае запятой разделяются именно BindingIdentifier.
Число 4 не является идентификатором, поэтому и показывается синтаксическая ошибка.
var объявляет переменную и факультативно присваивает ей значение. Декларация это инструкция (statement), а не выражение (expression), и по синтаксису после запятой в объявлении возможны только другие объявления переменных (факультативно с присваиванием). Вот так работает:
var i;
i = 15,4; // Присваивает 15, возвращает 4.
console.log(i);
Теперь сначала происходит присваивание, потом возврат второго операнда.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости