为什么箭头函数没有参数数组?

Con*_*ror 59 javascript lambda arguments anonymous-function ecmascript-6

function foo(x) {
   console.log(arguments)
} //foo(1) prints [1]
Run Code Online (Sandbox Code Playgroud)

var bar = x => console.log(arguments) 
Run Code Online (Sandbox Code Playgroud)

以相同方式调用时出现以下错误:

Uncaught ReferenceError: arguments is not defined
Run Code Online (Sandbox Code Playgroud)

Syl*_*ter 108

箭头函数没有这个,因为arguments类似数组的对象是一个开始的解决方法,ES6已经使用rest参数解决了这个问题:

var bar = (...arguments) => console.log(arguments);
Run Code Online (Sandbox Code Playgroud)

rest这里绝不是保留,而是选择了.你可以随意调用它,它可以与正常参数结合使用:

var test = (one, two, ...rest) => [one, two, rest];
Run Code Online (Sandbox Code Playgroud)

你甚至可以走另一条路,这个花哨的申请说明:

var fapply = (fun, args) => fun(...args);
Run Code Online (Sandbox Code Playgroud)

  • 这很糟糕,我在`console.log`语句中使用`arguments`,因此使用'rest parameters'会强制我更改函数调用签名; 从箭头函数中删除`arguments`是一个错误的决定. (3认同)
  • 关于其余参数如何避免对 `arguments` 对象的需求的好点子。使用 rest 参数,您可以随时拥有实际的数组。不使用时没有语言开销。 (2认同)
  • 这是最好的解决方案。你最后一个奇特的例子确实让我着迷。var fapply = (fun, args) => fun(...args); (2认同)