Pomenované funkčné výrazy v JavaScripte
Majme takýto funkčný výraz:
let test = function() {
console.log('!');
};
test(); // vypíše '!'
Dajme našej funkcii meno func:
let test = function func() {
console.log('!');
};
test();
Ako už viete, pod týmto menom nie je prístup k funkcii:
let test = function func() {
console.log('!');
};
test(); // vypíše '!'
func(); // vyhodí chybu
Načo však dávať funkcii meno, ak nebude dostupné? Vec sa má tak, že toto meno bude nedostupné zvonku funkcie, ale dostupné vnútri tejto funkcie.
Skontrolujme to:
let test = function func() {
console.log(func); // funkcia vypíše svoj vlastný zdrojový kód
};
test(); // voláme funkciu
Zavolajme našu funkciu vnútri nej samotnej:
let test = function func() {
console.log('!'); // vypíšeme '!'
func(); // voláme samých seba
};
test();
Ak spustíte tento kód, do konzoly sa bude vypisovať nekonečné množstvo výpisov do konzoly.
Naša funkcia môže byť volaná
vnútri seba samého nielen ako func, ale
aj ako test:
let test = function func() {
console.log('!');
test(); // voláme samých seba
};
test();
V čom je však rozdiel? Rozdiel je v tom, že meno
test - je len premenná. Počas
činnosti skriptu sa naša funkcia môže zapísať
do inej premennej alebo odovzdať ako parameter
- v tomto prípade môže spojenie medzi premennou test
a funkciou zmiznúť.
Meno func je naopak pevne naviazané na funkciu
práve preto, aby bolo možné odkázať
na našu funkciu vnútri nej samotnej.
Takéto Function Expression s menom funkcie sa nazývajú pomenované funkčné výrazy.