У функций стрелок ES6 есть свои собственные аргументы или нет?

Я не знаю, может ли стрелка связывать arguments с лексической областью или нет.

Взгляните на этот пример (ту же концепцию можно использовать для this):

var b = function() { return () => console.log(arguments); };
b(1,2,3)(4,5,6); // different result of chrome vs FF.

Когда я запускаю это в Chrome, я получаю [1,2,3], но в Firefox я получаю [4,5,6]. Что происходит?

Ответ 1

Из spec:

Любая ссылка на arguments, super, this или new.target в пределах ArrowFunction должен разрешить привязку в лексически закрытом окружающая среда.

Поэтому правильный ответ будет [1,2,3]. Firefox исправил проблему в версии 43 (ошибка № 889158).

Ответ 2

Нет, функции стрелок не имеют собственных arguments, this, super или new.target.

См. примечание в 14.2.16 Семантика времени выполнения: Оценка:

Функция ArrowFunction не определяет локальные привязки для arguments, super, this или new.target. Любая ссылка на arguments, super, this или new.target в пределах ArrowFunction должна быть разрешена привязкой в ​​лексически окружении. Обычно это будет Function Environment сразу включающей функции.

Ответ 3

Функции стрелки не имеют собственного объекта аргументов.

Функции стрелок не выставляют объект-аргумент в свой код: arguments.length, arguments[0], arguments[1] и т.д. обратитесь к аргументам, предоставленным функции стрелки при вызове.

Arrow_functions

В этом примере

var b = function() {
  return () => console.log(arguments);
};

b(1,2,3)(4,5,6);

Ответ 4

То, что происходит, на самом деле довольно просто. Chrome, похоже, не добавляет объект arguments к области внутренней функции (стрелки), в то время как Firefox делает.

Это означает, что аргументы, зарегистрированные в Chrome, являются аргументами, переданными родительской функции, которая является "нормальной" функцией.

Firefox верит (и, на мой взгляд, они правы), что функции стрелок также должны иметь объект arguments, и поэтому они регистрируют второй набор чисел.

Как говорили другие, то, что делает Firefox, не соответствует спецификации.