Официальная информация о `аргументах 'в функциях 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]