美文网首页
caller和callee

caller和callee

作者: 殷灬商 | 来源:发表于2017-02-08 15:31 被阅读55次

    这两天在查阅资料的时候发现了一些之前没见过的小内容

    1.caller

    这个方法一般来说用的很少,就简单的介绍一下

    var a = function(){
        console.log(a.caller);
    }
    a();
    var b = function(){
        a();
    }
    b();
    

    这里会有两个打印,第一个打印是null,第二个打印的是b所对应的函数.第一次打印是window去调用的a函数,window是顶层调用,所以打印的是null,第二个打印是在b函数里进行,这样就能通过a函数找到对应的函数调用者.所以caller作用就是返回当前这个函数的调用者,在在函数中调用有效,否则就返回null.
    可以打印一下a.caller的typeof,返回的是function,但是为了防止函数的循环调用,a.caller()会报错的,综上来看,这个属性,真没啥用.

    2.callee

    callee跟caller外观很像,但是callee是函数arguments的属性,它会返回当前这个正在被调用的函数

    function test(){
        console.log(arguments.callee);
    }
    test(10, 20)
    

    打印的就是test这个函数,callee只有一个属性,length,这个属性的作用是函数的形参个数,这要跟arguments.length有区别,后者是实参个数

    function test(a){
        console.log(arguments.callee.length); // 1
        console.log(arguments.length);           // 2
    }
    test(10, 20)
    

    可以通过这个属性,能实现递归函数的作用,下面就通过他来实现以下5的阶乘

    function test(a){
        if(a == 1){
            return 1;
        }
        return arguments.callee(a - 1) * a;
    }
    console.log(test(5)); // 120
    

    相关文章

      网友评论

          本文标题:caller和callee

          本文链接:https://www.haomeiwen.com/subject/ewxjbttx.html