Почему такой вызов функции неверен в JavaScript?

Я хотел бы создать анонимную функцию, а затем немедленно вызвать ее.

1) Это вызовет синтаксическую ошибку. Почему?

function ()
{
    alert("hello");
}();

2) оберните определение функции с помощью (), и оно работает.

(function ()
{
    alert("hello");
})();

3) или назначьте анонимную функцию переменной. Оно работает.

var dummy = function()
{
    alert("hello");
}();

Почему не работает первый способ?


person Morgan Cheng    schedule 22.03.2009    source источник
comment
Значит, это не синтаксическая ошибка?   -  person karim79    schedule 22.03.2009
comment
Как говорится, это синтаксическая ошибка   -  person olliej    schedule 22.03.2009


Ответы (1)


Спецификация языка ECMAScript, раздел 12.4, гласит:

ExpressionStatement не может начинаться с ключевого слова function, так как это может сделать его неоднозначным с FunctionDeclaration.

Таким образом, ваш случай 1 не разрешен, потому что это может привести к двусмысленности в языке. Другие случаи представляют собой другие типы операторов (не ExpressionStatement), в которых это не проблема, поэтому конструкция разрешена.

person sth    schedule 22.03.2009