(() => console.log(arguments))(1,2,3); // Chrome, FF, Node give "1,2,3" // Babel gives "arguments is not defined" from parent scopeDe acuerdo con Babel (y por lo que puedo decir de las recomendaciones iniciales de TC39), eso es "inválido" ya que las funciones de flecha deberían usar su alcance principal para los argumentos. La única información que he podido encontrar que contradice esto es un solo comentario que dice que esto fue rechazado por TC39, pero no puedo encontrar nada que lo respalde.
Solo busco documentos oficiales aquí.
Chrome, FF y el nodo parecen estar mal aquí, Babel tiene razón:
Las funciones de flecha no tienen un enlace de arguments propio en su alcance; no se crea ningún objeto de argumentos al llamarlos.
buscando documentos oficiales aquí
Las expresiones de función de flecha se evalúan como funciones que tienen su [[ThisMode]] establecido en lexical , y cuando se llaman así, la creación de instancias de declaración no crea un objeto de arguments . Incluso hay una nota específca (18 a) que dice que " Las funciones de flecha nunca tienen objetos de argumentos ".
Como señaló Bergi, las funciones de flecha no tienen su propia variable de arguments .
Sin embargo, si desea capturar los argumentos para su función de flecha, simplemente puede usar un parámetro de descanso
const myFunc = (...args) => console.log ("arguments", args) myFunc (1, 2, 3) // arguments [1, 2, 3]Los parámetros de descanso se pueden combinar con otros parámetros posicionales, pero siempre deben incluirse como el último parámetro
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 comete el error de escribir un parámetro de descanso en cualquier otra posición, obtendrá un Error
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