キーワード: 引数、呼び出し先、呼び出し元
引数: 関数に渡されるパラメーターを表します
呼び出し先: 関数のステートメントと関数本体を表します
呼び出し元: 関数を呼び出す関数を表します
引数
このオブジェクトは、実行される関数とそれを呼び出す関数のパラメータ。
caller
現在の関数を呼び出した関数への参照を返します。
functionName.caller
functionName オブジェクトは、実行された関数の名前です。
説明
関数の場合、caller 属性は関数の実行時にのみ定義されます。関数がトップレベルから呼び出された場合、caller には null が含まれます。 caller 属性が文字列コンテキストで使用される場合、結果は functionName.toString と同じになります。つまり、関数の逆コンパイルされたテキストが表示されます。
callee
実行中の Function オブジェクト (指定された Function オブジェクトの本体) を返します。
[function.]arguments.callee
オプションの関数パラメータは、現在実行されている Function オブジェクトの名前です。
説明
calleeプロパティの初期値は実行中のFunctionオブジェクトです。
callee 属性は、arguments オブジェクトのメンバーであり、関数オブジェクト自体への参照を表します。これは、匿名関数の再帰や関数のカプセル化を保証するのに役立ちます。たとえば、次の例では、合計を再帰的に計算します。 1からnまでの自然数。このプロパティは、関連する関数が実行されている場合にのみ使用できます。また、呼び出し先には長さ属性があり、検証にはこの方が適している場合があることにも注意してください。 argument.length は実際のパラメータの長さ、arguments.callee.length は仮パラメータの長さです。これにより、呼び出し中の仮パラメータの長さが実際のパラメータの長さと一致しているかどうかを判断できます。
<script type='text/javascript'> function test(x,y,z) { alert("实参长度:"+arguments.length); alert("形参长度:"+arguments.callee.length); alert("形参长度:"+test.length); alert(arguments[ 0 ]) alert(test[ 0 ]) // undefined 没有这种用法 } //test(1,2,3); test(1,2,3,4); /* * arguments不是数组(Array类) */ Array.prototype.selfvalue = 1 ; function testAguments() { alert( " arguments.selfvalue= " + arguments.selfvalue); } alert("Array.sefvalue="+new Array().selfvalue); testAguments(); /**/ /* * 演示函数的caller属性. * 说明:(当前函数).caller:返回一个对函数的引用,该函数调用了当前函数 */ function callerDemo() { if (callerDemo.caller) { var a = callerDemo.caller.arguments[ 0 ]; alert(a); } else { alert( " this is a top function " ); } } function handleCaller() { callerDemo(); } callerDemo(); handleCaller("参数1","参数2"); /**/ /* * 演示函数的callee属性. * 说明:arguments.callee:初始值就是正被执行的 Function 对象,用于匿名函数 */ function calleeDemo() { alert(arguments.callee); } calleeDemo(); (function(arg0,arg1){alert("形数数目为:"+arguments.callee.length)})(); /**/ /* * 演示apply,call函数的用法 * 说明:作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别: * apply(thisArg,argArray); * call(thisArg[,arg1,arg2…] ]); * 即所有函数内部的this指针都会被赋值为thisArg */ function ObjectA() { alert( " 执行ObjectA() " ); alert(arguments[ 0 ]); this .hit = function (msg) {alert(msg)} this .info = " 我来自ObjectA " } function ObjectB() { alert( " 执行ObjectB() " ); // 调用ObjectA()方法,同时ObjectA构造函数中的所有this就会被ObjectB中的this替代 ObjectA.apply( this ,arguments); // ObjectA.call(this); alert( this .info); } ObjectB('参数0'); var value = " global 变量 " ; function Obj() { this .value = " 对象! " ; } function Fun1() { alert( this .value); } Fun1(); Fun1.apply(window); Fun1.apply(new Obj()); </script>
その他の js 引数、jcallee 呼び出し元の使用法の概要、および関連記事については、PHP 中国語 Web サイトに注目してください。