获得一个函数的arity

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

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

 function zero() { // Should return 0 } function one(x) { // Should return 1 } function two(x, y) { // Should return 2 } 
 > 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 } 

函数的参数存储在.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 

正如其他答案所述, length属性告诉你。 所以zero.length将是0, one.length将是1,并且two.length将是2。

从ES2015开始,我们有两个皱纹:

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

确定函数的参数时不计算“rest”参数:

 function stillOne(a, ...rest) { } console.log(stillOne.length); // 1 

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

例:

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

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