Expresii funcționale denumite în JavaScript
Să presupunem că avem următoarea expresie funcțională:
javascriptlet test = function() {
console.log('!');
};
test(); // va afișa '!'
Să dăm funcției noastre numele func:
javascriptlet test = function func() {
console.log('!');
};
test();
După cum știți deja, nu vă puteți referi la funcție după acest nume:
javascriptlet 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:
javascriptlet 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:
javascriptlet 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:
javascriptlet 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.