Imenovani funkcijski izrazi v JavaScriptu
Recimo, da imamo takšen funkcijski izraz:
let test = function() {
console.log('!');
};
test(); // izpiše '!'
Dajmo naši funkciji ime func:
let test = function func() {
console.log('!');
};
test();
Kot že veste, po tem imenu ni mogoče dostopati do funkcije:
let test = function func() {
console.log('!');
};
test(); // izpiše '!'
func(); // vrne napako
Zakaj pa potem dajati ime funkciji, če ne bo dostopno? Bistvo je v tem, da tega imena ne bo mogoče dostopati zunaj funkcije, vendar je dostopno znotraj te funkcije.
Preverimo:
let test = function func() {
console.log(func); // funkcija bo izpisala svojo izvorno kodo
};
test(); // kličemo funkcijo
Pokličimo našo funkcijo znotraj nje same:
let test = function func() {
console.log('!'); // izpišemo '!'
func(); // kličemo same sebe
};
test();
Če zaženete to kodo, se bo v konzolo izpisovala neskončna količina izpisov v konzolo.
Pravzaprav je naša funkcija lahko poklicana
znotraj sebe ne le kot func, temveč
tudi kot test:
let test = function func() {
console.log('!');
test(); // kličemo same sebe
};
test();
V čem je razlika? Razlika je v tem, da je ime
test le spremenljivka. V procesu
delovanja skripta se lahko naša funkcija zapiše
v drugo spremenljivko ali posreduje kot parameter
- v tem primeru lahko povezava med spremenljivko test
in funkcijo izgine.
Ime func je togo vezano na funkcijo
specifično zato, da se lahko dostopimo do
naše funkcije znotraj nje same.
Takšni Function Expression z imenom funkcije se imenujejo imenovani funkcijski izrazi.