Javascript では、関数に定義された仮パラメータの数をどのように判断できますか?
これはarguments
、関数が呼び出されたときのパラメーターではなく、関数が定義された名前付き引数の数であることに注意してください。
function zero() {
// Should return 0
}
function one(x) {
// Should return 1
}
function two(x, y) {
// Should return 2
}
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
関数は、次のように独自のアリティ (長さ) を決定できます。
// 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
プロパティはそれを示しています。0zero.length
にone.length
なり、1 になり、two.length
2 になります。
ES2015 の時点で、2 つの問題があります。
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
関数が期待する引数の数を返すために使用される arity プロパティは、存在しなくなり、 Function.prototype.length プロパティに置き換えられました。