Sobes.tech
Junior

Čo viete o rozdieloch medzi výrazom funkcie (function expression) a deklaráciou funkcie (function declaration)?

sobes.tech AI

Odpoveď od AI

Izraz funkcije može biti imenovan ali i anoniman. Deklaracija funkcije uvek ima ime.

Glavna razlika je u mehanizmu podizanja (hoisting):

  • Deklaracija funkcije: Potpuno se podiže, uključujući telo. Funkcija je dostupna za pozivanje u kodu pre njenog stvarnog deklarisanja.
  • Izraz funkcije: Podiže se samo promenljiva kojoj je dodeljena (ako se koristi var). Sama funkcija je dostupna tek nakon što interpreter dostigne red sa njenom definicijom. Sa let i const nema podizanja ni za promenljivu.
// Deklaracija funkcije
console.log(declarationFunc()); // Radi, funkcija je podignuta

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

// Izraz funkcije
// console.log(expressionFunc()); // Izazvaće TypeError ili ReferenceError (zavisno od 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).