2009-03-22 7 views
5

Я хотел бы создать анонимную функцию, а затем вызвать ее немедленно.Почему этот вызов функции неправильный в JavaScript?

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

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

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

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

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

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

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

+0

Так, видимо, это не синтаксическая ошибка? – karim79

+0

Как сказано в сообщении, это синтаксическая ошибка – olliej

ответ

12

ECMAScript Language Specification, раздел 12.4, говорит:

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

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