Junior
Ce știi despre diferențele dintre o expresie de funcție (function expression) și o declarație de funcție (function declaration)?
sobes.tech AI
Răspuns de la AI
Expresia funcției poate fi numită sau anonimă. Declarația de funcție are întotdeauna un nume.
Principala diferență este mecanismul de ridicare (hoisting):
- Declarația de funcție: Este ridicată complet, inclusiv corpul. Funcția este disponibilă pentru apel în cod înainte de declarația sa efectivă.
- Expresia de funcție: Doar variabila căreia i se atribuie este ridicată (dacă se folosește
var). Funcția în sine devine disponibilă doar după ce interpretatorul ajunge la linia cu definiția sa. Culetșiconstnu există ridicare chiar și pentru variabilă.
// Declarația de funcție
console.log(declarationFunc()); // Funcționează, funcția a fost ridicată
function declarationFunc() {
return "Eu sunt o declarație";
}
// Expresia de funcție
// console.log(expressionFunc()); // Va genera TypeError sau ReferenceError (depinde de var/let/const)
const expressionFunc = function() {
return "Eu sunt o expresie";
};
console.log(expressionFunc()); // Funcționează după definire
Declarațiile de funcții sunt preferate pentru uzul obișnuit, deoarece ordinea lor în cod nu afectează posibilitatea de a le apela. Expresiile de funcții sunt adesea folosite pentru:
- Crearea de funcții anonime (de exemplu, ca argumente sau expresii de funcție invocate imediat - IIFE).
- Definirea condiționată a funcțiilor.
- Crearea de closures.