在Javascript中,如何确定为函数定义的形式参数的数量?
注意,这不是调用函数时的arguments
参数,而是函数定义的命名参数的数量。
function zero() {
// Should return 0
}
function one(x) {
// Should return 1
}
function two(x, y) {
// Should return 2
}
答案 0 :(得分:59)
> zero.length
0
> one.length
1
> two.length
2
一个函数可以像这样确定它自己的arity(长度):
// For IE, and ES5 strict mode (named function)
function foo(x, y, z) {
return foo.length; // Will return 3
}
// Otherwise
function bar(x, y) {
return arguments.callee.length; // Will return 2
}
答案 1 :(得分:11)
函数的arity存储在.length
属性中。
function zero() {
return arguments.callee.length;
}
function one(x) {
return arguments.callee.length;
}
function two(x, y) {
return arguments.callee.length;
}
> console.log("zero="+zero() + " one="+one() + " two="+two())
zero=0 one=1 two=2
答案 2 :(得分:4)
正如其他答案所述,length
属性告诉您。因此zero.length
为0,one.length
为1,two.length
为2。
从ES2015开始,我们有两个皱纹:
arguments
伪数组不同)确定函数的arity时,不计算“rest”参数:
function stillOne(a, ...rest) { }
console.log(stillOne.length); // 1
类似地,带有默认参数的参数不会添加到arity中,并且实际上阻止其后的任何其他参数添加到它,即使它们没有显式默认值(它们被假定为具有静默默认值) undefined
):
function oneAgain(a, b = 42) { }
console.log(oneAgain.length); // 1
function oneYetAgain(a, b = 42, c) { }
console.log(oneYetAgain.length); // 1
答案 3 :(得分:0)
函数arity是函数包含的参数个数。可以通过调用length属性来实现。
示例:强>
function add(num1,num2){}
console.log(add.length); // --> 2
function add(num1,num2,num3){}
console.log(add.length); // --> 3
注意:函数调用中传递的参数数量不会影响函数的arity。
答案 4 :(得分:0)
arity属性用于返回函数预期的参数数量,但是,它不再存在,并且已被Function.prototype.length属性替换。