Espressioni di Funzione Nome in JavaScript
Supponiamo di avere un'espressione di funzione come questa:
let test = function() {
console.log('!');
};
test(); // stamperà '!'
Diamo un nome func alla nostra funzione:
let test = function func() {
console.log('!');
};
test();
Come già sapete, non è possibile accedere alla funzione tramite questo nome:
let test = function func() {
console.log('!');
};
test(); // stamperà '!'
func(); // darà un errore
Perché allora dare un nome alla funzione se non sarà accessibile? Il punto è che questo nome non sarà accessibile dall'esterno della funzione, ma è accessibile all'interno della funzione stessa.
Verifichiamo:
let test = function func() {
console.log(func); // la funzione stamperà il proprio codice sorgente
};
test(); // chiamiamo la funzione
Chiamiamo la funzione al suo interno:
let test = function func() {
console.log('!'); // stampiamo '!'
func(); // chiamiamo noi stessi
};
test();
Se esegui questo codice, in console verrà stampata una quantità infinita di output.
In realtà, la nostra funzione può essere chiamata
al suo interno non solo come func, ma
anche come test:
let test = function func() {
console.log('!');
test(); // chiamiamo noi stessi
};
test();
Qual è la differenza? La differenza è che il nome
test è solo una variabile. Durante
l'esecuzione dello script, la nostra funzione potrebbe essere assegnata
a un'altra variabile o passata come parametro
- in questo caso il collegamento tra la variabile test
e la funzione potrebbe andare perso.
Il nome func, invece, è rigidamente associato alla funzione
proprio per consentire di riferirsi
alla funzione al suo interno.
Tali Function Expression con il nome della funzione sono chiamate espressioni di funzione nome.