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