65

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

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

function zero() {
    // Should return 0
}

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

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

5 回答 5

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

来源

一个函数可以像这样确定它自己的数量(长度):

// 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
}
于 2011-01-31T06:25:41.757 回答
12

函数的数量存储在其.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
于 2011-01-31T06:25:49.013 回答
12

正如其他答案中所涵盖的那样,该length属性会告诉您这一点。所以zero.length将是 0,one.length将是 1,two.length将是 2。

从 ES2015 开始,我们有两个问题:

  • 函数可以在参数列表的末尾有一个“rest”参数,它将在该位置或之后给出的任何参数收集到一个真正的数组中(与arguments伪数组不同)
  • 函数参数可以有默认值

确定函数的元数时不计算“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

于 2016-12-15T18:57:30.523 回答
0

函数arity是函数包含的参数个数,可以通过调用length属性来获得。

例子:

function add(num1,num2){}
console.log(add.length); // --> 2

function add(num1,num2,num3){}
console.log(add.length); // --> 3

注意:函数调用中传递的参数数量不影响函数的数量。

于 2017-10-26T06:17:14.133 回答
0

用于返回函数预期参数数量的 arity 属性,然而,它不再存在并且已被 Function.prototype.length 属性所取代。

于 2017-12-18T02:39:18.343 回答