Expresii funcționale denumite în JavaScript
Să presupunem că avem următoarea expresie funcțională:
let test = function() {
console.log('!');
};
test(); // va afișa '!'
Să dăm funcției noastre numele func:
let test = function func() {
console.log('!');
};
test();
După cum știți deja, nu vă puteți referi la funcție după acest nume:
let test = function func() {
console.log('!');
};
test(); // va afișa '!'
func(); // va arunca o eroare
De ce să dăm un nume funcției dacă acesta nu va fi accesibil? Ideea este că acest nume va fi inaccesibil din afara funcției, dar accesibil în interiorul acestei funcții.
Să verificăm:
let test = function func() {
console.log(func); // funcția va afișa propriul său cod sursă
};
test(); // apelăm funcția
Să autoapelăm funcția noastră în interiorul ei însăși:
let test = function func() {
console.log('!'); // afișăm '!'
func(); // ne autoapelăm
};
test();
Dacă executați acest cod, în consolă va fi afișat un număr infinit de mesaje.
De fapt, funcția noastră poate fi apelată
în interiorul ei însăși nu doar ca func, ci
și ca test:
let test = function func() {
console.log('!');
test(); // ne autoapelăm
};
test();
Care este diferența? Diferența este că numele
test este doar o variabilă. În timpul
execuției scriptului, funcția noastră poate fi atribuită
unei alte variabile sau transmisă ca parametru
- în acest caz, legătura dintre variabila test
și funcție poate fi pierdută.
Numele func este însă legat rigid de funcție
special pentru a ne putea referi
la funcția noastră în interiorul ei însăși.
Astfel de Expresii Funcționale cu nume de funcție se numesc expresii funcționale denumite.