Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2016.
Une expression de fonction fléchée (arrow function en anglais) permet d'avoir une syntaxe plus courte que les expressions de fonction et ne possède pas ses propres valeurs pour this, arguments, super, ou new.target. Les fonctions fléchées sont souvent anonymes et ne sont pas destinées à être utilisées pour déclarer des méthodes.
Le nom d'un argument. S'il n'y a aucun argument, cela doit être indiqué par une paire de parenthèses (). S'il n'y a qu'un argument, les parenthèses ne sont pas nécessaires (ex. : toto => 1).
instructions ou expressionPlusieurs instructions doivent être encadrées par des accolades, {}. Une expression simple ne nécessite pas d'accolades. L'expression est également la valeur de retour implicite pour cette fonction.
Deux facteurs sont à l'origine de la conception des fonctions fléchées : une syntaxe plus courte et l'absence de this spécifique à la fonction. Sur ce dernier point, cela signifie qu'une fonction fléchée ne lie pas son propre this au sein de la fonction (il en va de même avec arguments, super ou new.target).
Note : Voir aussi l'article sur les fonctions fléchées présent sur https://tech.mozfr.org/post/2015/06/10/ES6-en-details-%3A-les-fonctions-flechees (l'article original en anglais est disponible ici).
Pour des aspects fonctionnels, la légèreté de la syntaxe est bienvenue. Par exemple :
Jusqu'a l'apparition des fonctions fléchées, chaque nouvelle fonction définissait son propre this :
Cela a pu entraîner des confusions lorsqu'on utilisait un style de programmation orientée objet.
Avec ECMAScript 3/5, ce problème a pu être résolu en affectant la valeur de this à une autre variable :
Autrement, on aurait pu utiliser une fonction de liaison afin que la bonne valeur this soit passée à la fonction grandir.
Les fonctions fléchées ne créent pas de nouveau contexte, elles utilisent la valeur this de leur contexte. Aussi, si le mot-clé this est utilisé dans le corps de la fonction, le moteur recherchera la référence à cette valeur dans une portée parente. Le code qui suit fonctionne ainsi de la façon attendue car le this utilisé dans setInterval est le this de la portée de Personne :
Ici this provient du contexte englobant, les règles du mode strict sont donc ignorées pour ce qui concerne this.
Le reste des règles du mode strict sont appliquées normalement.
Étant donné que this provient du contexte englobant, si on invoque une fonction via la méthode call ou apply, cela ne passera que des arguments mais n'aura aucun effet sur this :
Les fonctions fléchées n'exposent pas d'objet arguments : arguments.length, arguments[0], arguments[1], et autres ne font donc pas référence aux arguments passés à la fonction fléchés. Dans ce cas arguments est simplement une référence à la variable de même nom si elle est présente dans la portée englobante :
Les fonctions fléchées n'ont donc pas leur propre objet arguments, mais dans la plupart des cas, les paramètres du reste représentent une bonne alternative :
Comme indiqué précédemment, les fonctions fléchées sont mieux indiquées pour les fonctions qui ne sont pas des méthodes. Prenons un exemple pour illustrer ce point
Les fonctions fléchées ne possèdent pas de prototype :
Le mot-clé yield ne peut pas être utilisé dans le corps d'une fonction fléchée (sauf si cela intervient dans une autre fonction, imbriquée dans la fonction fléchée). De fait, les fonctions fléchéees ne peuvent donc pas être utilisées comme générateurs.
Les fonctions fléchées ne peuvent pas être utilisées comme constructeurs et lèveront une exception si elles sont utilisées avec le mot-clé new.
Les fonctions fléchées peuvent avoir une syntaxe concise ou utiliser un bloc d'instructions classique. Cette dernière syntaxe n'a pas de valeur de retour implicite et il faut donc employer l'instruction return.
Attention à bien utiliser les parenthèses lorsqu'on souhaite renvoyer des objets avec des littéraux :
En effet, ici, l'analyse de l'expression trouve des blocs d'instructions au lieu de littéraux objets. Pour éviter cet effet indésirable, on pourra encadrer le littéral objet :
Il ne peut pas y avoir de saut de ligne entre les paramètres et la flèche d'une fonction fléchée.
La flèche utilisée pour une fonction fléchée n'est pas un opérateur. Les fonctions fléchées ont des règles spécifiques quant à leur place dans la syntaxe et interagissent différemment de la précédence des opérateurs par rapport à une fonction classique :
| ECMAScript® 2027 Language Specification # sec-arrow-function-definitions |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 17 févr. 2025 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.