f: function(a, b, c) { console.log(arguments.length); }
字符串 如果使用箭头函数来保留父上下文,则始终可以将.bind(this)添加到末尾(and incur a small performance penalty)。 我不知道你到底需要完成什么,但是如果你不想写一个具有未知arity的函数,也许默认参数可以让你处理用户忘记了一个必需参数的情况?.或者你可以把你的参数打包在一个对象中,并使用Object.keys来确定长度:
let f = (args) => console.log(Object.keys(args).length);
f({ a: 1, b: 2, c: 3 });
2条答案
按热度按时间ldxq2e6h1#
简短的回答是:“不”,或者“也许”。
较长的答案是:从MDN:
与函数表达式相比,箭头函数表达式的语法更短,并且按词法绑定this值(不绑定其自身的
this
、arguments
、super
或new.target
)。箭头函数始终是匿名的。这些函数表达式最适合于非方法函数,并且不能用作构造函数。arrow函数的主要用途是回调,就像在父上下文中执行代码一样执行代码,从而避免了恼人的和丑陋的
const that = this;
需求,并隐式地执行了它。因此,由于它是匿名执行的,在父函数的上下文中,不存在
arguments
,或者说它的值是父函数的上下文中的值。解决方案1:遗留或“幼稚”实施
字符串
*优点
arguments
等)that
(或其他一些var名称),而不是this
。that
引用解决方案2:函数绑定(ES5)
型
*优点
this
可用arguments
等)解决方案3:解构赋值(ES6)
型
*优点
arguments
示例xqk2d5yq2#
你已经弄明白了,spread operator +
.length
将给予你使用箭头函数所需的信息。我认为你所呈现的特定用例(你需要保留参数信息并知道参数的长度)更适合非箭头函数:字符串
如果使用箭头函数来保留父上下文,则始终可以将
.bind(this)
添加到末尾(and incur a small performance penalty)。我不知道你到底需要完成什么,但是如果你不想写一个具有未知arity的函数,也许默认参数可以让你处理用户忘记了一个必需参数的情况?.或者你可以把你的参数打包在一个对象中,并使用
Object.keys
来确定长度:型
这将保留参数信息,并允许您确定参数的长度。