La differenza principale è il primo (una dichiarazione di funzione) è issata all'inizio della portata in cui è dichiarata, mentre il secondo (un'espressione di funzione) non è.
Questa è la ragione si è in grado di chiamare una funzione che è stata dichiarata dopo che si chiama:
testFunction();
function testFunction() {}
Non si può fare che con un'espressione di funzione, in quanto l'assegnazione avviene sul posto:
testFunction();
var testFunction = function() {}; //TypeError
C'è anche una terza forma (un nome funzione di espressione):
var testFunction = function myFunc() {};
In questo caso, l'identificatore myFunc
è solo nell'ambito della funzione, mentre testFunction
è disponibile in qualsiasi ambito dichiarato. MA (e c'è sempre un, ma quando si tratta di Internet Explorer) in IE sotto la versione 9 l'identificatore myFunc
erroneamente fuori portata per l'ambito di contenimento. Le espressioni di funzione nominate sono utili quando è necessario fare riferimento alla funzione di chiamata (dal momento che arguments.callee
è obsoleto).
Si noti inoltre che lo stesso vale per le dichiarazioni di variabili:
console.log(x); //undefined (not TypeError)
var x = 10;
Si può immaginare che il motore JavaScript interpreta il codice come questo:
var x; //Declaration is hoisted to top of scope, value is `undefined`
console.log(x);
x = 10; //Assignment happens where you expect it to
fonte
2012-06-21 21:13:08
http: // kangax. github.com/nfe/ leggi questo –
In secondo piano ....... –