(() => console.log(arguments))(1,2,3);
// Chrome, FF, Node give "1,2,3"
// Babel gives "arguments is not defined" from parent scope
Selon Babel (et d'après ce que je peux dire des recommandations initiales du TC39), c'est "invalide" car les fonctions fléchées devraient utiliser leur portée parent pour les arguments. La seule information que j'ai pu trouver qui contredit ceci est un seul commentaire disant que cela a été rejeté par TC39, mais je ne trouve rien pour étayer cela.
Je cherche juste des documents officiels ici.
Chrome, FF et node semblent avoir tort ici, Babel a raison:
Les fonctions fléchées n'ont pas de liaison arguments
propre dans leur portée; aucun objet arguments n'est créé lors de leur appel.
à la recherche de documents officiels ici
Les expressions de fonction de flèche évaluent les fonctions qui ont leur [[ThisMode]] défini à lexical
, et lorsqu'elles sont appelées instanciation de déclaration ne crée pas de - arguments
objet . Il y a même une note spécifique (18 a) indiquant que " Les fonctions fléchées n'ont jamais d'arguments. ".
Comme l'a noté Bergi, les fonctions fléchées n'ont pas leur propre variable arguments
.
Cependant, si vous souhaitez capturer les arguments de votre fonction flèche, vous pouvez simplement utiliser un paramètre rest
const myFunc = (...args) =>
console.log ("arguments", args)
myFunc (1, 2, 3)
// arguments [1, 2, 3]
Les paramètres de repos peuvent être combinés avec d'autres paramètres de position, mais doivent toujours être inclus en tant que dernier paramètre
const myFunc = (a, b, c, ...rest) =>
console.log (a, b, c, rest)
myFunc (1, 2, 3, 4, 5, 6, 7)
// 1 2 3 [ 4, 5, 6, 7 ]
Si vous faites l'erreur d'écrire un paramètre de repos dans toute autre position, vous obtiendrez une erreur
const myFunc = (...rest, a, b, c) =>
console.log (a, b, c, rest)
myFunc (1, 2, 3, 4, 5, 6, 7)
// Error: Rest parameter must be last formal parameter