Официальная информация о `аргументах 'в функциях ES6 Arrow?

(() => console.log(arguments))(1,2,3);

// Chrome, FF, Node give "1,2,3"
// Babel gives "arguments is not defined" from parent scope

Согласно Вавилону (и из того, что я могу сказать о первоначальных рекомендациях TC39), это "недействительно", поскольку функции стрелок должны использовать свою родительскую область для аргументов. Единственная информация, которую я смог найти, что противоречит этому, - это единственный комментарий, в котором говорится, что это было отклонено TC39, но я не могу найти ничего, чтобы поддержать это.

Просто ищите официальные документы здесь.

Ответы

Ответ 1

Хром, FF и узел, похоже, ошибаются здесь, Бабель прав:

Функции Arrow не имеют привязки собственных arguments в своей области; при вызове их не создается объект-аргумент.

ищет официальные документы здесь

Выражения функции со стрелкой оценивают функции, у которых их [[ThisMode]] установлены на lexical, а когда они называются созданием объявления, не создают объект arguments. Существует даже примечание (18а), в котором указано, что "функции стрелок никогда не имеют объектов аргументов".

Ответ 2

Как отмечает Берги, функции стрелок не имеют собственных arguments.

Однако, если вы хотите захватить args для своей функции стрелки, вы можете просто использовать параметр rest

const myFunc = (...args) =>
  console.log ("arguments", args)
  
myFunc (1, 2, 3)
// arguments [1, 2, 3]