2009-03-22 16 views
5

Chciałbym utworzyć anonimową funkcję, a następnie wywołać ją natychmiast.Dlaczego ten rodzaj wywołania funkcji jest nieprawidłowy w JavaScript?

1) Przyniesie to błąd składni. Czemu?

2) zawiń definicję funkcji za pomocą() i działa.

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

3) lub przypisz funkcję anonimową do zmiennej. To działa.

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

Dlaczego pierwszy sposób nie działa?

+0

Najwyraźniej nie jest to błąd składniowy? – karim79

+0

Jak powiedział, jest to błąd składniowy – olliej

Odpowiedz

12

ECMAScript Language Specification, rozdział 12.4, mówi:

ExpressionStatement nie można uruchomić ze słowem kluczowym function bo może uczynić go niejednoznaczne z FunctionDeclaration.

Twoja sprawa 1 jest niedozwolona, ​​ponieważ może prowadzić do niejednoznaczności w języku. Pozostałe przypadki to różne rodzaje instrukcji (nie ExpressionStatement s), w których to nie jest problem, więc konstrukcja jest tam dozwolona.