Una dichiarazione è un'istruzione di funzione denominata; un'espressione assegna una funzione a una variabile. La differenza pratica è l'hoisting.
();
() { ; }
();
expressed = () { ; };
Una dichiarazione è un'istruzione di funzione denominata; un'espressione assegna una funzione a una variabile. La differenza pratica è l'hoisting.
();
() { ; }
();
expressed = () { ; };
Le dichiarazioni di funzione vengono sollevate insieme al loro corpo, quindi l'intera funzione esiste prima che l'esecuzione la raggiunga. Un'espressione di funzione è solo un valore assegnato a una variabile — nel momento della chiamata anticipata, expressed è ancora undefined (var) o nel TDZ (let/const).
// expression — for callbacks, conditional definitions, arrow functions
const handler = () => doThing();
const fn = condition ? a : b;
arr.map(x => x * 2);
// declaration — clear, hoisted top-level functions
function calculateTotal(items) { ... }
Le dichiarazioni si leggono bene per le funzioni denominate di livello superiore e traggono vantaggio dall'hoisting (puoi definirle dopo il loro utilizzo). Le espressioni sono necessarie per le funzioni freccia, i callback, gli IIFE e l'assegnazione condizionale di funzioni. Le funzioni freccia sono sempre espressioni.