La ragione
function() { return val;}();
non funziona è perché si tratta di una funzione dichiarazione, non un espressione. È una distinzione piuttosto piccola, ma fondamentalmente, se la dichiarazione inizia con function
, è proprio come una dichiarazione di funzione C, e non è possibile chiamare la funzione, perché non c'è alcun valore di espressione.
L'aggiunta delle parentesi rende la funzione definizione parte di un'espressione, quindi ha un valore e può essere richiamata.
L'assegnazione del valore di ritorno della funzione elimina anche la necessità di parentesi, poiché la definizione della funzione non è l'intera istruzione. Ad esempio, questi funzionano:
var value = function() { alert("works"); return 0; }();
(function() { alert("works"); })();
ma questo non lo fa:
function() { alert("doesn't work"); }();
ho sempre includere le parentesi, anche quando non sono necessari perché rende più facile vedere che io sono chiamando la funzione, invece di assegnarla a una variabile.
fonte
2009-04-15 05:39:14
mi ha battuto su di esso +1 –