Sobes.tech
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. Con let e const non 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.