関数のアリティを取得します
-
27-10-2019 - |
質問
JavaScriptでは、関数に対して定義された正式なパラメーターの数をどのように決定できますか?
注意してください、これはそうではありません 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
関数は、次のような独自のareity(長さ)を決定できます。
// 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の時点で、2つのしわがあります。
- 関数は、パラメーターリストの最後に「REST」パラメーターを持つことができます。これは、その位置またはその後の引数を真の配列に収集することができます(
arguments
擬似アレイ) - 関数パラメーターにはデフォルト値を持つことができます
関数の条件を決定するとき、「REST」パラメーターはカウントされません。
function stillOne(a, ...rest) { }
console.log(stillOne.length); // 1
同様に、デフォルトの引数を持つパラメーターはアリティに追加されず、実際には、明示的なデフォルトがない場合でも、他の人がそれに従うことを防ぎます(サイレントデフォルトがあると想定されています undefined
):
function oneAgain(a, b = 42) { }
console.log(oneAgain.length); // 1
function oneYetAgain(a, b = 42, c) { }
console.log(oneYetAgain.length); // 1
関数アリティは、関数に含まれるパラメーターの数です。長さプロパティを呼び出すことで達成できます。
例:
function add(num1,num2){}
console.log(add.length); // --> 2
function add(num1,num2,num3){}
console.log(add.length); // --> 3
注:関数呼び出しで渡されたパラメーターの数は、関数の不条理に影響しません。
ただし、関数によって予想される引数の数を返すために使用されるアリティプロパティは、存在しなくなり、function.prototype.lengthプロパティに置き換えられています。
所属していません StackOverflow