Expressions de fonction nommées en JavaScript
Supposons que nous ayons une expression de fonction comme celle-ci :
let test = function() {
console.log('!');
};
test(); // affichera '!'
Donnons un nom func à notre fonction :
let test = function func() {
console.log('!');
};
test();
Comme vous le savez déjà, on ne peut pas accéder à la fonction par ce nom :
let test = function func() {
console.log('!');
};
test(); // affichera '!'
func(); // générera une erreur
Alors, pourquoi donner un nom à la fonction s'il ne sera pas accessible ? Le fait est que ce nom sera inaccessible depuis l'extérieur de la fonction, mais accessible à l'intérieur de cette fonction.
Vérifions :
let test = function func() {
console.log(func); // la fonction affichera son propre code source
};
test(); // nous appelons la fonction
Appelons notre fonction à l'intérieur d'elle-même :
let test = function func() {
console.log('!'); // nous affichons '!'
func(); // nous nous appelons nous-mêmes
};
test();
Si vous exécutez ce code, une quantité infinie de sorties sera affichée dans la console.
En fait, notre fonction peut être appelée
à l'intérieur d'elle-même non seulement comme func, mais
aussi comme test :
let test = function func() {
console.log('!');
test(); // nous nous appelons nous-mêmes
};
test();
Quelle est la différence ? La différence est que le nom
test est simplement une variable. Pendant le processus
d'exécution du script, notre fonction peut être assignée
à une autre variable ou passée comme paramètre
- dans ce cas, le lien entre la variable test
et la fonction peut disparaître.
Le nom func, quant à lui, est rigidement lié à la fonction
spécialement pour pouvoir se référer
à notre fonction à l'intérieur d'elle-même.
De telles Function Expression avec un nom de fonction sont appelées expressions de fonction nommées.