Junior
Mit tud a függvénykifejezés (function expression) és a függvénydeklaráció (function declaration) közötti különbségekről?
sobes.tech MI
Válasz az MI-től
A függvénykifejezés lehet névvel vagy névtelen. A függvénydeklaráció mindig névvel rendelkezik.
A fő különbség a hoisting mechanizmusban van:
- Függvénydeklaráció: Teljes mértékben fel van emelve, beleértve a törzset is. A függvény elérhető a hívásra a kódban a tényleges deklarációja előtt.
- Függvénykifejezés: Csak az a változó van felemelve, amelyhez hozzárendelték (ha
var-t használnak). Maga a függvény csak akkor érhető el, miután az értelmező eléri a definíciós sort.letésconstesetén nincs hoisting még a változókra sem.
// Függvénydeklaráció
console.log(declarationFunc()); // Működik, a függvény fel van emelve
function declarationFunc() {
return "Én egy deklaráció vagyok";
}
// Függvénykifejezés
// console.log(expressionFunc()); // TypeError vagy ReferenceError (a var/let/const-tól függően)
const expressionFunc = function() {
return "Én egy kifejezés vagyok";
};
console.log(expressionFunc()); // A definíció után működik
A függvénydeklarációk általános használatra előnyösebbek, mivel a sorrendjük a kódban nem befolyásolja a hívhatóságukat. A függvénykifejezéseket gyakran használják:
- névtelen függvények létrehozására (pl. argumentumként vagy azonnal meghívott függvénykifejezések - IIFE-ként).
- feltételes függvénydefiníciókra.
- lezárások (closures) létrehozására.