Pavadinti funkciniai išsireiškimai JavaScript
Tarkime, kad turime tokį funkcinį išsireiškimą:
let test = function() {
console.log('!');
};
test(); // išves '!'
Duokime mūsų funkcijai pavadinimą func:
let test = function func() {
console.log('!');
};
test();
Kaip jau žinote, pagal šį pavadinimą neįmanoma kreiptis į funkciją:
let test = function func() {
console.log('!');
};
test(); // išves '!'
func(); // išmes klaidą
Kam tada duoti funkcijai pavadinimą, jei ji nebus prieinama? Esmė ta, kad šis pavadinimas bus neprieinamas iš funkcijos išorės, bet prieinamas jos viduje.
Patikrinkime:
let test = function func() {
console.log(func); // funkcija išves savo paties pradinį kodą
};
test(); // iškviečiame funkciją
Iškvieskime mūsų funkciją jos viduje:
let test = function func() {
console.log('!'); // išvedame '!'
func(); // iškviečiame save patį
};
test();
Jei paleisite šį kodą, į konsolę bus išvedama begalinis kiekis išvedimų į konsolę.
Tiesą sakant, mūsų funkcija gali būti iškviesta
savo viduje ne tik kaip func, bet
ir kaip test:
let test = function func() {
console.log('!');
test(); // iškviečiame save patį
};
test();
Koks skirtumas? Skirtumas tas, kad pavadinimas
test - tai tik kintamasis. Proceso
metu mūsų funkcija gali būti įrašyta
į kitą kintamąjį arba perduota parametru
- tokiu atveju ryšys tarp kintamojo test
ir funkcijos gali išnykti.
Pavadinimas func yra standžiai pririštas prie funkcijos
specialiai tam, kad būtų galima kreiptis
į mūsų funkciją jos viduje.
Tokie Function Expression su funkcijos pavadinimu vadinami pavadintais funkciniais išsireiškimais.