キーワード: 引数、呼び出し先、呼び出し元
引数: 関数に渡されるパラメータを表します。
callee: 関数と関数本体を表すステートメント
caller: 関数を呼び出す関数を表します。
引数
このオブジェクトは、実行される関数と、それを呼び出す関数のパラメーターを表します。
発信者
現在の関数を呼び出した関数への参照を返します。
関数名.caller
functionName オブジェクトは、実行される関数の名前です。
説明する
関数の場合、caller 属性は関数の実行時にのみ定義されます。関数がトップレベルから呼び出された場合、caller には null が含まれます。 caller 属性が文字列コンテキストで使用される場合、結果は functionName.toString と同じになります。つまり、関数の逆コンパイルされたテキストが表示されます。
着信者
実行中の Function オブジェクト (指定された Function オブジェクトの本体) を返します。
[関数.]引数.呼び出し先
オプションの function パラメーターは、現在実行されている Function オブジェクトの名前です。
説明する
callee 属性の初期値は、実行中の Function オブジェクトです。
callee 属性は、arguments オブジェクトのメンバーであり、関数オブジェクト自体への参照を表します。これは、匿名関数の再帰や関数のカプセル化を保証するのに役立ちます。たとえば、次の例では、自然関数の合計を再帰的に計算します。 1からnまでの数字。このプロパティは、関連する関数が実行されている場合にのみ使用できます。また、呼び出し先には長さ属性があり、検証にはこの方が適している場合があることにも注意してください。 argument.length は実際のパラメータの長さ、arguments.callee.length は仮パラメータの長さです。これにより、呼び出し時の仮パラメータの長さが実際のパラメータの長さと一致しているかどうかを判断できます。
次のようにコードをコピーします。
<script type='text/javascript'>
関数テスト(x,y,z)
{
alert("実際のパラメータの長さ:"+arguments.length);
alert("仮パラメータの長さ:"+arguments.callee.length);
alert("仮パラメータの長さ:"+test.length);
アラート(引数[ 0 ])
alert(test[ 0 ]) // 未定義にはそのような使用法はありません
}
//テスト(1,2,3);
テスト(1,2,3,4);
/*
* 引数は配列ではありません (Array クラス)
*/
Array.prototype.selfvalue = 1;
関数 testAguments() {
alert( " argument.selfvalue= " + argument.selfvalue);
}
alert("Array.sefvalue="+new Array().selfvalue);
testAguments();
/**/ /*
* 関数の呼び出し元属性を示します。
* 説明: (現在の関数).caller: 現在の関数を呼び出した関数への参照を返します。
*/
関数 callerDemo() {
if (callerDemo.caller) {
var a = callerDemo.caller.arguments[0];
アラート(a);
} それ以外 {
alert( " これは最上位の関数です " );
}
}
関数 handleCaller() {
callerDemo();
}
callerDemo();
handleCaller("パラメータ 1", "パラメータ 2");
/**/ /*
* 関数の callee 属性を示します。
* 説明: argument.callee: 初期値は実行中の Function オブジェクトであり、匿名関数に使用されます。
*/
関数 calleeDemo() {
アラート(引数.呼び出し先);
}
calleeDemo();
(function(arg0,arg1){alert("シェイプの数は次のとおりです: "+arguments.callee.length)})();
/**/ /*
* apply関数とcall関数の使用法をデモンストレーションします
* 注: この関数は、関数を別のオブジェクトにバインドして実行します。この 2 つの唯一の違いは、パラメーターの定義方法です。
* apply(thisArg,argArray);
* call(thisArg[,arg1,arg2…] ]);
* つまり、すべての関数内の this ポインターには thisArg が割り当てられます。
*/
functionObjectA() {
alert( "ObjectA() を実行" );
アラート(引数[ 0 ]);
this .hit = 関数 (msg) {alert(msg)}
this .info = "私は ObjectA から来ました"
}
functionObjectB() {
alert( "ObjectB() を実行" );
// ObjectA() メソッドを呼び出すと、ObjectA コンストラクター内のこれはすべて ObjectB 内のこれに置き換えられます。
ObjectA.apply( this ,arguments); // ObjectA.call(this);
アラート(この .info);
}
ObjectB('パラメータ 0');
var 値 = "グローバル変数";
関数 Obj() {
this .value = "オブジェクト!";
}
関数 Fun1() {
アラート(この .value);
}
Fun1();
Fun1.apply(ウィンドウ);
Fun1.apply(new Obj());
</script>