为啥箭头函数没有参数数组? [复制]
Posted
技术标签:
【中文标题】为啥箭头函数没有参数数组? [复制]【英文标题】:Why do arrow functions not have the arguments array? [duplicate]为什么箭头函数没有参数数组? [复制] 【发布时间】:2017-06-03 13:34:23 【问题描述】:function foo(x)
console.log(arguments)
//foo(1) prints [1]
但是
var bar = x => console.log(arguments)
以相同方式调用时会出现以下错误:
Uncaught ReferenceError: arguments is not defined
【问题讨论】:
不是匿名函数,而是没有arguments
对象的箭头函数。因此,您的问题是做出不正确的陈述/假设。使用 function
关键字声明的常规匿名函数具有 arguments
对象就好了。
关于语言设计决策的问题通常不适合 Stack Overflow。
@FelixKling。对不起,我对你的想法持相反的看法。这个问题的答案有助于消除许多其他人的“问号”。我相信提出一个看起来“不适合”Stack Overflow 的问题总是不错的。
@daiyanze:这与问题本身无关,而与谁能回答问题有关。特别是对于 javascript,语言设计问题只能由实际参与设计过程的人或密切关注它的人来回答。这些人并不多,在 Stack Overflow 上的人更少。通过直接与相关人员联系,您可能会更成功地获得答案(如果对更多人感兴趣,可以在此处发布一个自我回答的问题)。
我也支持@daiyanze。仅考虑到这个问题的活动,很明显这是一个很好的地方。
【参考方案1】:
箭头函数没有这个,因为arguments
类似数组的对象是一种解决方法,ES6已经用rest
参数解决了这个问题:
var bar = (...arguments) => console.log(arguments);
arguments
绝不是在这里保留的,而是被选中的。您可以随意调用它,并且可以将其与普通参数结合使用:
var test = (one, two, ...rest) => [one, two, rest];
你甚至可以走另一条路,用这个花哨的应用说明:
var fapply = (fun, args) => fun(...args);
【讨论】:
关于休息参数如何消除对arguments
对象的需求的好点。使用 rest 参数,您可以随时拥有一个实际的数组。不使用时没有语言开销。
感谢使用 rest 运算符似乎效果很好。
我认为在这种情况下,...arguments
表示 rest parameters,而不是 rest arguments。请参阅Array.of(...items),其中使用了术语“剩余参数”,而在String.fromCharCode ( ...codeUnits ) 中使用了术语“剩余参数”。
这是最好的解决方案。你最后一个奇特的例子确实让我很喜欢。 var fapply = (fun, args) => fun(...args);
这很糟糕,我在console.log
语句中使用arguments
,因此使用“剩余参数”会迫使我更改函数调用签名;从箭头函数中删除 arguments
是一个糟糕的决定。以上是关于为啥箭头函数没有参数数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 GHCi 中,为啥函数箭头 `:kind (->)` 的种类包含问号 `(->) :: ?? ->? -> *`? [复制]