JavaScript 引数オブジェクト

巴扎黑
巴扎黑オリジナル
2016-12-06 10:17:471049ブラウズ

1. JavaScript では、引数オブジェクトは実際には現在の関数の組み込みプロパティです。 argument は Array に非常に似ていますが、実際には Array インスタンスではありません。これは、次のコードで確認できます (もちろん、実際には関数 funcArg では、引数を呼び出すときに funcArg.arguments を記述する必要はなく、引数を直接記述するだけです)。

Js コード

Array.prototype.testArg = "test";  
function funcArg() {  
    alert(funcArg.arguments.testArg);    
    alert(funcArg.arguments[0]);  
}  
  
alert(new Array().testArg); // result: "test"  
funcArg(10);                // result: "undefined"  "10"

2. 引数オブジェクトの長さは、仮パラメータの数ではなく実際のパラメータの数によって決まります。仮パラメータは、関数内のメモリ空間で再度開かれる変数ですが、引数オブジェクトのメモリ空間とは重なりません。引数と値の両方が存在する場合、2 つの値は同期されますが、どちらか一方に値がない場合、この値のないケースでは値は同期されません。以下のコードが確認できます。

Js コード

function f(a, b, c){  
    alert(arguments.length);   // result: "2"  
    a = 100;  
    alert(arguments[0]);       // result: "100"  
    arguments[0] = "qqyumidi";  
    alert(a);                  // result: "qqyumidi"  
    alert(c);                  // result: "undefined"  
    c = 2012;  
    alert(arguments[2]);       // result: "undefined"  
}  
  
f(1, 2);

3. JavaScript の関数の宣言と呼び出しの特性から、JavaScript の関数はオーバーロードできないことがわかります。 corth他の言語での過負荷の根拠に応じて、「関数の返品値は異なります。または、正式なパラメーターの数は異なります。実際、実際のパラメータはすでに引数オブジェクトに格納されています。

さらに、JavaScript の関数を JavaScript 関数自体からオーバーロードできない理由を深く理解しましょう。JavaScript では、関数は実際にはオブジェクトであり、関数名は関数への参照であるか、関数名自体が変数です。以下に示す関数宣言と関数式の実際の意味は (関数宣言と関数式の違いを考慮せずに) 上記と同じです。これは、JavaScript の関数がオーバーロードできないという特徴を理解するのに非常に役立ちます。

Js コード

function f(a){  
    return a + 10;  
}  
  
function f(a){  
    return a - 10;  
}  
  
// 在不考虑函数声明与函数表达式区别的前提下,其等价于如下  
  
var f = function(a){  
    return a + 10;  
}  
  
var f = function(a){  
    return a - 10;  
}

IV 引数オブジェクトには、callee という非常に便利な属性があります。 argument.callee は、この引数オブ​​ジェクトが存在する現在の関数参照を返します。再帰的な関数呼び出しを使用する場合は、関数名自体の代わりに argument.callee を使用することをお勧めします。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。