Возможные дубликаты:
В чем разница между выражением функции и объявлением в JavaScript? Объяснить синтаксис анонимных функций, встроенный в JavaScript
Почему это:
(function () {
//code
}());
и это:
var f = function () {
//code
}();
работает, а это:
function () {
//code
}();
нет? Он выглядит точно так же - анонимная функция определена и сразу же вызвана. Может ли кто-нибудь сделать цитату из стандарта JavaScript/ECMAScript, которая объясняет это?
ОБНОВЛЕНИЕ: Спасибо за ответы всем! Таким образом, это выражение выражения функции и объявления. См. этот ответ "Переполнение стека" , стандарт ECMAScript, и эта замечательная статья: Именованные функциональные выражения, демистифицированные.
Повторить ответы:
-
Первый фрагмент интерпретируется как выражение, потому что применяется оператор группировки
()
- см. стандарт ECMAScript 11.1.6. -
Во втором фрагменте функция интерпретируется как выражение, потому что она находится в правой части оператора присваивания,
=
. -
В третьем фрагменте нет ничего, что позволяет интерпретатору читать функцию как выражение, поэтому он считал объявление, которое является недопустимым без идентификатора (Gecko позволяет ему пройти, но он задыхается после
()
оператор группировки (как он думает) ни к чему не применим).