得到一个功能的arity

时间:2011-01-31 06:21:43

标签: javascript functional-programming arity

在Javascript中,如何确定为函数定义的形式参数的数量?

注意,这不是调用函数时的arguments参数,而是函数定义的命名参数的数量。

function zero() {
    // Should return 0
}

function one(x) {
    // Should return 1
}

function two(x, y) {
    // Should return 2
}

5 个答案:

答案 0 :(得分:59)

> zero.length
0
> one.length
1
> two.length
2

Source

一个函数可以像这样确定它自己的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开始,我们有两个皱纹:

  • 函数可以在参数列表的末尾添加一个“rest”参数,该参数收集在该位置或之后给予真实数组的任何参数(与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属性替换。