Pojmenované funkční výrazy v JavaScriptu
Předpokládejme, že máme takový funkční výraz:
let test = function() {
console.log('!');
};
test(); // vypíše '!'
Pojďme naší funkci dát jméno func:
let test = function func() {
console.log('!');
};
test();
Jak již víte, podle tohoto jména nelze k funkci přistoupit:
let test = function func() {
console.log('!');
};
test(); // vypíše '!'
func(); // vrátí chybu
Proč tedy dávat funkci jméno, pokud nebude přístupné? Jde o to, že toto jméno bude nepřístupné zvenčí funkce, ale přístupné uvnitř této funkce.
Pojďme to ověřit:
let test = function func() {
console.log(func); // funkce vypíše svůj vlastní zdrojový kód
};
test(); // voláme funkci
Pojďme zavolat naši funkci uvnitř ní samotné:
let test = function func() {
console.log('!'); // vypíšeme '!'
func(); // voláme sami sebe
};
test();
Pokud spustíte tento kód, bude se do konzole vypisovat nekonečné množství výpisů do konzole.
Ve skutečnosti může být naše funkce volána
uvnitř sebe sama nejen jako func, ale
i jako test:
let test = function func() {
console.log('!');
test(); // voláme sami sebe
};
test();
V čem je tedy rozdíl? Rozdíl je v tom, že jméno
test - je pouze proměnná. Během
práce skriptu se naše funkce může zapsat
do jiné proměnné nebo předat parametrem
- v tomto případě může souvislost mezi proměnnou test
a funkcí zmizet.
Jméno func je naopak pevně svázáno s funkcí
specifikálně proto, aby bylo možné přistoupit
k naší funkci uvnitř ní samotné.
Takové Function Expression s názvem funkce se nazývají pojmenované funkční výrazy.