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プロパティはそれを示しています。0zero.lengthone.lengthなり、1 になり、two.length2 になります。

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

于 2016-12-15T18:57:30.523 に答える
0

関数が期待する引数の数を返すために使用される arity プロパティは、存在しなくなり、 Function.prototype.length プロパティに置き換えられました。

于 2017-12-18T02:39:18.343 に答える