ホームページ  >  記事  >  ウェブフロントエンド  >  js 引数、jcallee 呼び出し元の使用法の概要

js 引数、jcallee 呼び出し元の使用法の概要

高洛峰
高洛峰オリジナル
2017-01-04 17:21:591216ブラウズ

キーワード: 引数、呼び出し先、呼び出し元
引数: 関数に渡されるパラメーターを表します
呼び出し先: 関数のステートメントと関数本体を表します
呼び出し元: 関数を呼び出す関数を表します

引数

このオブジェクトは、実行される関数とそれを呼び出す関数のパラメータ。

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=&#39;text/javascript&#39;>
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(&#39;参数0&#39;);

  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 サイトに注目してください。


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