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. Sleticonstnema 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).