Почему функции стрелок не имеют массив аргументов?

function foo(x) {
   console.log(arguments)
} //foo(1) prints [1]

но

var bar = x => console.log(arguments) 

дает следующую ошибку при вызове таким же образом:

Uncaught ReferenceError: arguments is not defined

Ответы

Ответ 1

Функции стрелок не имеют этого, так как объект массива arguments для начала был обходным путем, который ES6 решил с помощью параметра rest:

var bar = (...arguments) => console.log(arguments);

arguments ни в коем случае не зарезервированы здесь, но просто выбраны. Вы можете называть это как хотите, и это можно комбинировать с обычными параметрами:

var test = (one, two, ...rest) => [one, two, rest];

Вы даже можете пойти другим путем, проиллюстрированным этой причудливой заявкой:

var fapply = (fun, args) => fun(...args);