argments.callee,angments.caler用法

3046 ワード

argments.calleeはどの関数で動作しますか?どの関数を表しますか?匿名関数で使用されます.
針の働きをする
argments.callerは、本関数を呼び出す関数を指し、現在の関数を呼び出す関数の参照を保存しています.基本的には上位を探して本関数の関数を呼び出します.
  • はどちらもポインタに相当し、argmentsの関数を指すが、calerは彼を呼び出した関数を指す.
  • まず、argments.caleeを紹介します.
    
    (function(n){
        console.log(n); //10,9,8,7,6,5,4.3,2,1
        if(n>1){
            // var sum=n*arguments.callee(n-1);
            return n*arguments.callee(n-1);
        }
        return n;
    })(10);
    //1
    自身を呼び出して階乗を実現しました.jsの高速道路の例を参照すると、より理解できます.
    function fac(num){
        if(num<=1){
            return 1;
        }else{
            return num*arguments.callee(num-1);
        }
    }
    var fa=fac;
    console.log(fa(5));   //120
    fac=function(){
        return 0;
    }
    console.log(fa(5));    //0
  • 書き換えるとangments.calleeの針が指す方向に直接影響を与えますので、0
  • に戻ります.
    まず、argments.calee.callerを紹介します.
    function two(){
        inner();
    }
    function inner(){
        console.log(inner.caller);
    }
    inner();  ==>
    // function two(){
    //  inner();
    // }
    これは関数自体でコールしたcalerです.実はinner()関数を呼び出しましたが、innerの参照関数two()を出力しました.
    function outer(){
        inner();
    }
    function inner(){
        console.log(arguments.callee.caller);
    }
    実は最終目的は直接関数自体の代わりに発生するトラブルです.