Sobes.tech
Junior

Šta znate o razlikama između izraza funkcije (function expression) i deklaracije funkcije (function declaration)?

sobes.tech АИ

Одговор од АИ

Izraz funkcije može biti imenovan ili anonimni. Deklaracija funkcije uvijek ima ime.

Glavna razlika je mehanizam podizanja (hoisting):

  • Deklaracija funkcije: Potpuno se podiže, uključujući tijelo. Funkcija je dostupna za pozivanje u kodu prije njezine stvarne deklaracije.
  • Izraz funkcije: Podiže se samo varijabla kojoj je dodijeljena (ako se koristi var). Sama funkcija je dostupna tek nakon što interpreter dosegne redak s njenom definicijom. S let i const nema podizanja ni za varijablu.
// Deklaracija funkcije
console.log(declarationFunc()); // Radi, funkcija je podignuta

function declarationFunc() {
  return "Ja sam deklaracija";
}

// Izraz funkcije
// console.log(expressionFunc()); // Izazvat će TypeError ili ReferenceError (ovisno o var/let/const)

const expressionFunc = function() {
  return "Ja sam izraz";
};

console.log(expressionFunc()); // Radi nakon definicije

Deklaracije funkcija su poželjne za opštu upotrebu, jer njihov redosled u kodu ne utiče na mogućnost poziva. Izrazi funkcija često se koriste za:

  • Kreiranje anonimnih funkcija (npr. kao argumenti ili odmah pozvane funkcije - IIFE).
  • Uslovno definisanje funkcija.
  • Kreiranje zatvaranja (closures).