Почему такого рода вызов функций является неправильным в JavaScript? - PullRequest
5 голосов
/ 22 марта 2009

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

1) Это приведет к синтаксической ошибке. Почему?

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

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

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

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

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

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

1 Ответ

12 голосов
/ 22 марта 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...