Imenovani funkcionalni izrazi u JavaScript-u
Neka imamo sledeći funkcionalni izraz:
let test = function() {
console.log('!');
};
test(); // ispisace '!'
Hajde da damo ime func našoj funkciji:
let test = function func() {
console.log('!');
};
test();
Kao što već znate, po ovom imenu se ne može pristupiti funkciji:
let test = function func() {
console.log('!');
};
test(); // ispisace '!'
func(); // baciće grešku
Zašto onda dati ime funkciji, ako ono neće biti dostupno? Stvar je u tome što će ovo ime biti nedostupno spolja iz funkcije, ali dostupno unutar nje same.
Hajde da proverimo:
let test = function func() {
console.log(func); // funkcija će ispisati svoj sopstveni izvorni kod
};
test(); // pozivamo funkciju
Hajde da pozovemo našu funkciju unutar nje same:
let test = function func() {
console.log('!'); // ispisujemo '!'
func(); // pozivamo sami sebe
};
test();
Ako pokrenete ovaj kod, u konzolu će se beskonačno mnogo puta ispisivati '!'.
Zapravo, naša funkcija može biti pozvana
unutar sebe ne samo kao func, već
i kao test:
let test = function func() {
console.log('!');
test(); // pozivamo sami sebe
};
test();
U čemu je onda razlika? Razlika je u tome što je ime
test samo promenljiva. U toku rada skripta, naša funkcija može biti upisana
u drugu promenljivu ili prosleđena kao parametar
- u tom slučaju veza između promenljive test
i funkcije može nestati.
Ime func je, pak, čvrsto vezano za funkciju
upravo zato da bi se moglo pristupiti
našoj funkciji unutar nje same.
Ovakvi Function Expression sa imenom funkcije se nazivaju imenovanim funkcionalnim izrazima.