2009-03-22 8 views
5

Ich möchte eine anonyme Funktion erstellen und dann sofort aufrufen.Warum ist diese Art von Funktionsaufruf in JavaScript falsch?

1) Dies führt zu einem Syntaxfehler. Warum?

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

2) wickeln die Funktionsdefinition mit() und es funktioniert.

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

3) oder, weisen Sie die anonyme Funktion einer Variablen zu. Es klappt.

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

Warum der erste Weg nicht funktioniert?

+0

Also anscheinend ist es kein Syntaxfehler? – karim79

+0

Wie gesagt, es ist ein Syntaxfehler – olliej

Antwort

12

Die ECMAScript Language Specification, Abschnitt 12.4, sagt:

Ein ExpressionStatement nicht mit dem function Schlüsselwort beginnen, weil die könnte es mit einem FunctionDeclaration mehrdeutig machen.

Also Ihr Fall 1 ist nicht erlaubt, weil es zu Unklarheiten in der Sprache führen könnte. Die anderen Fälle sind verschiedene Arten von Anweisungen (nicht ExpressionStatement s), in denen dies kein Problem ist, so dass das Konstrukt dort erlaubt ist.