JavaScript/Fonctions anonymes
Précédent : Fonctions | Index | Suivant : Programmation par objets |
Une fonction anonyme est une fonction qui a été déclarée sans identifiant nommé pour s’y référer. En tant que telle, une fonction anonyme n’est généralement pas accessible après sa création initiale.
Définition d’une fonction normale:
function hello() { alert('Hello world');}hello();
Définition d’une fonction anonyme:
var anon = function() { alert('I am anonymous');}anon();
Une utilisation courante des fonctions anonymes est comme arguments d’autres fonctions. Une autre utilisation courante est celle de fermeture, pour laquelle voir aussi le chapitre sur les fermetures.
Utilisation comme argument à d’autres fonctions:
setTimeout(function() { alert('hello');}, 1000);
Ci-haut, la fonction anonyme est passée à setTimeout, qui exécutera la fonction dans 1000 millisecondes.
Utilisation comme fermeture:
(function() { alert('foo');}());
Décomposition des énoncés anonymes ci-dessus:
- Les parenthèses qui entourent sont une enveloppe pour la fonction anonyme
- Les parenthèses de queue initient un appel à la fonction et peuvent contenir des arguments
Une autre façon d’écrire l’exemple précédent et d’obtenir le même résultat :
(function(message) { alert(message);}('foo'));
Une autre représentation de l’exemple précédent place les parenthèses initiatrices sur les parenthèses entourantes et non sur la fonction elle-même, ce qui entraîne une confusion sur la raison pour laquelle les parenthèses entourantes sont nécessaires en premier lieu.
(function() { // …})();
Certains ont même eu recours à donner des noms dérogatoires à la technique des accolades de queue, dans le but d’encourager les gens à les replacer à l’intérieur des accolades d’entourage, là où elles initient la fonction, au lieu des accolades d’entourage.
Une fonction anonyme peut se référer à elle-même via la variable locale arguments.callee, utile pour les fonctions anonymes récursives :
// returns the factorial of 10.alert((function(n) { return !(n > 1) ? 1 : arguments.callee(n - 1) * n;})(10));
Cependant, arguments.callee est déprécié dans ECMAScript 5 Strict. Les problèmes avec arguments.callee sont qu’il rend impossible de réaliser la récursion de queue (un plan futur pour JavaScript), et résulte en une valeur this différente. Au lieu d’utiliser arguments.callee, vous pouvez utiliser l’expression de fonction nommée à la place:
// returns the factorial of 10.alert( (function factorial(n) { return (n <= 1) ? 1 : factorial(n - 1) * n;})(10) );
Une expression de fonction fléchée est similaire à ce qui dans d’autres langages de programmation est connu sous le nom de lambda, introduit dans ECMAScript 6 en 2015. Elle fournit un raccourci pour créer des fonctions anonymes.
Exemples:
- x => x + 1
- Une fonction anonyme avec un argument x qui retourne x + 1.
- x => {return x + 1}
- Comme ci-dessus, mais avec un corps de fonction.
- (x, y) => x + y
- Une fonction flèche à 2 arguments.
- (x, y) => {return x + y}
Liens:
- Fonctions # L’expression de la fonction flèche, développeur.mozilla.org
- Fonctions/Fonctions flèche, developer.mozilla.org
.