2009-03-22 4 views
5

Je voudrais créer une fonction anonyme et l'invoquer immédiatement.Pourquoi ce type d'invocation de fonction est-il incorrect dans JavaScript?

1) Cela entraînera une erreur de syntaxe. Pourquoi?

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

2) envelopper la définition de la fonction avec() et cela fonctionne.

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

3) ou d'affecter la fonction anonyme à une variable. Ça marche.

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

Pourquoi la première façon ne fonctionne pas?

+0

Donc apparemment ce n'est pas une erreur de syntaxe? – karim79

+0

Comme l'a dit sth, c'est une erreur de syntaxe – olliej

Répondre

12

La ECMAScript Language Specification, l'article 12.4, dit:

Un ExpressionStatement ne peut pas commencer avec le mot-clé function parce que pourrait rendre ambiguë avec un FunctionDeclaration.

Votre cas 1 n'est donc pas autorisé, car il peut entraîner des ambiguïtés dans la langue. Les autres cas sont différents types d'instructions (pas ExpressionStatement s) dans lequel ce n'est pas un problème, de sorte que la construction est autorisée là.

Questions connexes