ES6箭头函数是否有自己的参数?

时间:2015-10-22 19:20:45

标签: javascript ecmascript-6 arrow-functions

我不知道箭头函数是否将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]。发生了什么事?

4 个答案:

答案 0 :(得分:21)

来自spec

  

argumentssuperthisnew.target内的任何引用    ArrowFunction 必须解析为词法封闭中的绑定   环境。

因此,正确的答案是[1,2,3]。 Firefox已修复了版本43(bug 889158)中的问题。

答案 1 :(得分:9)

不,箭头功能没有自己的argumentsthissupernew.target

请参阅14.2.16 Runtime Semantics: Evaluation上的说明:

  

ArrowFunction 未定义argumentssuperthisnew.target的本地绑定。对 ArrowFunction 中的argumentssuperthisnew.target的任何引用都必须解析为词汇封闭环境中的绑定。通常,这将是一个直接封闭函数的Function Environment

答案 2 :(得分:2)

  

箭头函数没有自己的参数对象。

     

箭头函数不会将参数对象暴露给它们的代码:   arguments.lengtharguments[0]arguments[1]等不会   请参阅调用时提供给箭头函数的参数。

Arrow_functions

对于这个例子

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

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

正确答案应为[1, 2, 3]

答案 3 :(得分:-3)

实际上发生的事情非常简单。 Chrome似乎没有将arguments对象添加到内部(箭头)函数的范围内,而Firefox也是如此。

这意味着Chrome中记录的参数是传递给父函数的参数,这是一个" normal"功能

Firefox认为(在我看来他们是对的)箭头函数也应该有arguments对象,因此这就是他们记录第二组数字的原因。

正如其他人所说,Firefox的做法违反了规范。