14.arguments的callee问题和caller

function  test(){

    console.log(arguments.callee == test)      //true

}

arguments的callee函数指向函数本身的引用,例如在使用立即执行函数做初始化的时候,我们无法直接通过函数名来找到函数本身,那么我们可以用callee来找到函数本身.


var init = (function(n){    

    if(n == 1){

    return 1;

    }

    return n * arguments.callee(n - 1);

}(100));


arguments本身只有callee和length属性

function test(){

    arguments.callee     //test本身

    function demo(){

        arguments.callee     //demo本身

    }

}


caller不是arguments的属性,而是指向函数执行的那个环境

function test(){

    function demo(){

            demo.caller        //指向它运行的环境,test

    }

}

test()


在ES5的严格模式下 ,  "use  strict"下面caller和callee不允许使用


你可能感兴趣的:(14.arguments的callee问题和caller)