JavaScript関数が呼び出し元のarguments
を呼び出し元の関数の名前で参照できるメカニズムと、それがまだ言語内にある理由を教えてください。JavaScriptで呼び出し元の引数を参照できるのはなぜですか?
とこの記事に出くわした(https://code.google.com/p/v8/issues/detail?id=457)
エリック・コリーの例は、私は多分思った最初は
function foo(x) {
return bar(x + 1);
}
function bar(x) {
return foo.arguments[0];
}
foo(1)
以下に示します。関数を呼び出すと、arguments
フィールドが何らかの奇妙なグローバルな副作用として設定されますが、呼び出しの間だけ持続するように見えます。
function foo(x) {
return bar(x+1);
}
function bar(x) {
return foo.arguments[0];
}
console.log(foo(1)); // prints '1'
console.log(foo.arguments); // prints 'null'
なぜ言語でこの動作はありますか?下位互換以外の何かのために便利ですか?
編集:私は、現在の関数本体で引数の疑似配列を参照するためにarguments
を使用してについての質問ではないのです
、例えば
function variadic() {
for (var i = 0; i < arguments.length; i++) {
console.log("%s-th item is %s", i, JSON.stringify(arguments[i]));
}
}
variadic(1, 2, 3, 4, 5, []);
私は、呼び出し元のarguments
を参照するためにsomefunction.arguments
の使用について尋ねています。
Javascriptでは、いくつの引数を指定しても、関数は任意の数の引数で呼び出すことができます。 JavaScript関数には、この機能をサポートするargumentsオブジェクトと呼ばれるビルトインオブジェクトがあります。 – Gary
私の間違いは、私の例ではタイプミスがありました。 'foo.arguments'と言っているはずです。 –
この動作はstrictモードではなく、関数の 'を読み込もうとしています。引数は 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode(" secure "の下に)エラーをスローする – Eevee