Sobes.tech
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 és const eseté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.