Dato questo esempio di Javascript che ho trovato
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
Che vantaggio c'è nell'assegnare una funzione a un var?
Dato questo esempio di Javascript che ho trovato
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
Che vantaggio c'è nell'assegnare una funzione a un var?
Risposte:
La risposta breve credo sia semplicemente che stai creando una funzione anonima assegnata a una variabile, anziché creare una funzione denominata con ...
function sum() {}
Un buon modo per verificare le differenze è chiamare .ToString () su di esse e vedere la differenza oppure si può fare console.log (sum.name). Uno darà un nome reale e l'altro nulla, vale a dire la funzione anonima (quella assegnata al var). Ci sono anche dei dettagli, come la var sum = function () {} viene definita in fase di esecuzione e la funzione sum () {} viene definita in fase di analisi.
Un vantaggio è che non è possibile utilizzare una dichiarazione di funzione in un blocco. Possono trovarsi solo al livello superiore di un file o direttamente all'interno di un'altra funzione.
if (true) {
function foo() {}
}
try {
function foo(){}
}
switch (true) {
default:
function foo(){}
}
Questi sono tutti non specificati dallo standard e i browser fanno cose diverse, vedi /programming/10069204/function-declarations-inside-if-else-statements . Quindi, se devi usare l'altro stile a volte, per coerenza potresti volerlo fare sempre
Inoltre, non ne sono sicuro, ma se ricordo bene che alcuni vecchi minificatori non erano abbastanza intelligenti da gestire le dichiarazioni delle funzioni e non rinominarle.
Non sono un esperto di Javascript, quindi prendilo con un po 'di sale. Penso che in alcuni casi le persone potrebbero farlo per stile e la stessa cosa potrebbe essere raggiunta semplicemente scrivendo "function sum () {...}"
Tuttavia, assegnare una funzione a una variabile è una tecnica molto potente nella programmazione funzionale. Se hai familiarità con OOP, è in qualche modo simile al polimorfismo. Pensa all'esempio classico della classe base di animali e delle classi di derivazione gatto / cane. Puoi scrivere codice che funziona con Animal ma quando chiama una funzione, quella funzione potrebbe fare un lavoro diverso a seconda del tipo di istanza.
Nella programmazione funzionale, potresti avere un algoritmo che funziona con "una funzione" ma se stai usando una variabile per chiamare quella funzione, hai la flessibilità di assegnare una funzione diversa in fase di esecuzione.
Ad esempio, supponiamo che tu scriva un algoritmo per presentare 10.000 punti dati in una finestra di soli 500 pixel di diametro. Ogni pixel rappresenterà quindi 20 punti dati e per presentarli è necessario aggregare quei 20 punti dati in un singolo valore.
Supponiamo quindi che tu definisca un algoritmo per presentare i 10.000 punti e questo algoritmo utilizza una variabile di funzione chiamata aggregate in questo modo:
...
displayValue = aggregate( numbersInOnePixel );
...
Ora in fase di esecuzione l'utente può selezionare il modo in cui i dati devono essere aggregati. La variabile di funzione effettiva può essere una delle seguenti:
aggregate = function sum() {...}
aggregate = function min() {...}
aggregate = function max() {...}
aggregate = function average() {...}
È principalmente una questione di stile, dal momento che le uniche situazioni in cui si presenta la differenza (chiamando alcune delle funzioni prima di terminare tutte le dichiarazioni; usando il metodo toString) sono una specie di casi angolari, a mio avviso.
Uno degli argomenti che ho sentito a sostegno di questo var =
stile è che è coerente con il modo in cui dichiari le variabili normali. Ciò limita il numero di funzioni linguistiche che usi e semplifica la presentazione del tuo programma a qualcuno che non conosce Javascript.