Elnevezett funkcionális kifejezések a JavaScriptben
Tegyük fel, hogy van egy ilyen funkcionális kifejezésünk:
let test = function() {
console.log('!');
};
test(); // kiírja '!'
Adjunk nevet a függvényünknek func:
let test = function func() {
console.log('!');
};
test();
Mint már tudjátok, ezen a néven nem lehet hozzáférni a függvényhez:
let test = function func() {
console.log('!');
};
test(); // kiírja '!'
func(); // hibát ad
Miért adjunk nevet a függvénynek, ha az nem lesz elérhető? Az a helyzet, hogy ez a név a függvényen kívülről nem lesz elérhető, de a függvényen belülről igen.
Vizsgáljuk meg:
let test = function func() {
console.log(func); // a függvény kiírja a saját forráskódját
};
test(); // meghívjuk a függvényt
Hívjuk meg a függvényünket önmagán belül:
let test = function func() {
console.log('!'); // kiírjuk '!'
func(); // meghívjuk önmagunkat
};
test();
Ha ezt a kódot futtatjuk, akkor a konzolba végtelen számú üzenet kerül kiírásra.
Valójában a függvényünk önmagán belül nem csak
func néven hívható meg,
hanem test néven is:
let test = function func() {
console.log('!');
test(); // meghívjuk önmagunkat
};
test();
Mi a különbség? A különbség az, hogy a
test név csupán egy változó. A szkript
futása során a függvényünk lehet, hogy egy másik
változóba kerül, vagy paraméterként adódik át
- ebben az esetben a test változó
és a függvény közötti kapcsolat megszűnhet.
Az func név viszont szigorúan a függvényhez
van kötve, kifejezetten azért, hogy a függvényen
belülről lehessen hivatkozni rá.
Az ilyen, függvénynévvel rendelkező Function Expression-öket elnevezett funkcionális kifejezéseknek nevezzük.