Junior
Cosa sai delle differenze tra un'espressione di funzione (function expression) e una dichiarazione di funzione (function declaration)?
sobes.tech AI
Risposta dell'AI
L'espressione di funzione può essere nominata o anonima. La dichiarazione di funzione ha sempre un nome.
La principale differenza è nel meccanismo di hoisting:
- Dichiarazione di funzione: Viene sollevata completamente, incluso il corpo. La funzione è disponibile per essere chiamata nel codice prima della sua dichiarazione effettiva.
- Espressione di funzione: Solo la variabile a cui è assegnata viene sollevata (se si utilizza
var). La funzione stessa è disponibile solo dopo che l'interprete ha raggiunto la riga con la sua definizione. Conleteconstnon c'è hoisting nemmeno per la variabile.
// Dichiarazione di funzione
console.log(declarationFunc()); // Funziona, la funzione è stata sollevata
function declarationFunc() {
return "Io sono una dichiarazione";
}
// Espressione di funzione
// console.log(expressionFunc()); // Genererà TypeError o ReferenceError (dipende da var/let/const)
const expressionFunc = function() {
return "Io sono un'espressione";
};
console.log(expressionFunc()); // Funziona dopo la definizione
Le dichiarazioni di funzione sono preferibili per uso generale, poiché il loro ordine nel codice non influisce sulla possibilità di chiamarle. Le espressioni di funzione sono spesso usate per:
- Creare funzioni anonime (ad esempio, come argomenti o espressioni di funzione immediatamente invocate - IIFE).
- Definizione condizionale di funzioni.
- Creare closure.