Why do arrow functions not have the arguments array?

function foo(x) {
console.log(arguments)
} //foo(1) prints [1]

but

var bar = x => console.log(arguments)

gives the following error when invoked in the same way:

Uncaught ReferenceError: arguments is not defined
40361 次浏览

箭头函数没有这个,因为类似于 arguments数组的对象本来就是一个变通方法,ES6已经用 rest参数解决了这个问题:

var bar = (...arguments) => console.log(arguments);

arguments绝不是在这里预留的,而是刚刚选择的。你可以把它叫做任何你喜欢的名字,它可以和正常的参数结合起来:

var test = (one, two, ...rest) => [one, two, rest];

你甚至可以走另一条路,下面这个奇妙的例子说明了这一点:

var fapply = (fun, args) => fun(...args);