So che esistono diversi modi per definire una funzione in JavaScript. Due dei più comuni sono:Cosa succede in JavaScript quando uso la dichiarazione di funzione "tradizionale" in stile C?
(1) function add (a, b) {
return a + b;
}
(2) var add = function (a, b) {
return a + b;
}
Sto bene con l'idea di una funzione come un oggetto che può essere passato in giro, proprio come qualsiasi altra variabile. Quindi capisco perfettamente cosa stia facendo (2)
. Sta creando una funzione e assegnando a add
(diciamo che questo è nell'ambito globale, quindi add
è una variabile globale) detta funzione. Ma cosa succede se uso invece lo (1)
? So già che fa la differenza nell'ordine di esecuzione: se uso (1)
allora posso fare riferimento a add()
prima del punto nel codice in cui è definito add()
, ma se uso (2)
allora devo assegnare la mia funzione a add
prima che io possa inizia a fare riferimento a add()
.
È (1)
solo una scorciatoia per (2)
, anche se uno che si comporta come altri linguaggi in stile C ci consente di definire una funzione "sotto" il punto in cui viene utilizzata? O è internamente un diverso tipo di funzione? Quale è più "nello spirito" di JavaScript (se non è un termine troppo vago)? Vuoi limitare te stesso all'uno o all'altro, e se sì quale?
Una dichiarazione di funzione all'interno del blocco di un'istruzione 'if' è un errore di sintassi, secondo le specifiche ECMAScript. Nessuno dei principali browser genera un errore, probabilmente a causa del precedente impostato da IE e Mozilla. Mozilla lo aggira includendo un'estensione di ECMAScript chiamata 'FunctionStatement' (http://www.jibbering.com/faq/#functionStatement, http://kangax.github.com/nfe/#function-statements). JScript ha meno rispetto per le specifiche e conosce Dio internamente. –
Un commento sulla modifica: è vero che le dichiarazioni di funzione vengono anche chiamate istruzioni di funzione, ma in modo errato. La FAQ comp.lang.javascript (legato al mio commento precedente) rende questo punto molto eloquente: * "La dichiarazione termine funzione è stato ampiamente ed erroneamente usato per descrivere un' FunctionDeclaration'.This è fuorviante perché in ECMAScript, un 'FunctionDeclaration 'non è un' Statement'; ci sono dei posti in un programma in cui un 'Statement' è permesso ma un' FunctionDeclaration' non lo è. "* –
@Tim: Grazie per i commenti interessanti. Non ero a conoscenza del problema di denominazione "statement". –