2009-03-22 6 views
5

Mi piacerebbe creare una funzione anonima e quindi richiamarla immediatamente.Perché questo tipo di invocazione di funzione è errato in JavaScript?

1) Ciò comporterà un errore di sintassi. Perché?

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

2) wrap la definizione della funzione con() e funziona.

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

3) oppure, assegnare la funzione anonima a una variabile. Funziona.

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

Perché il primo modo non funziona?

+0

Quindi apparentemente non si tratta di un errore di sintassi? – karim79

+0

Come ha detto sth, si tratta di un errore di sintassi – olliej

risposta

12

La ECMAScript Language Specification, paragrafo 12.4, dice:

Un ExpressionStatement non può iniziare con la parola chiave function perché potrebbe rendere ambigua con un FunctionDeclaration.

Quindi il tuo caso 1 non è consentito, perché potrebbe causare ambiguità nella lingua. Gli altri casi sono diversi tipi di dichiarazioni (non ExpressionStatement s) in cui questo non è un problema, quindi il costrutto è consentito lì.