callee

Posted 晨落梦公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了callee相关的知识,希望对你有一定的参考价值。

首先解释callee

  参考网站 http://www.css88.com/archives/1706

callee是arguments的一个成员,仅当函数正在执行的时候才可用,so用于递归也行

代码示例:

(function () {

    function calleeDemo() {
        console.log(arguments.callee);
    }

    calleeDemo();
    
})();

结果输出

它的应用:

一、判断形参和实参的长度是否一致

  实参 arguments.length

  形参 arguments.callee.length

代码示例:

  function judgeParameterLength(arg1,arg2) {
        if (arguments.length==arguments.callee.length){
            console.log("形参与实参长度一致");
        }else {
            console.log("实参长度"+arguments.length,"形参长度"+arguments.callee.length);
        }
    }

    judgeParameterLength(1,2); //形参与实参长度一致
    judgeParameterLength(1); //实参长度1 形参长度2

二、递归

function sum(n) {
        if (n == 1)
            return 1;
        else
            return n + arguments.callee(n - 1);
    }
    console.log(sum(10)); //55

常规写法

function sum(n) {
        if (1 == n)
            return 1;
        else
            return n + sum(n - 1);
    }
    console.log(sum(10)); //55

理解:

  两者结果是一样的。

  非要找区别的话,正如我参考的那个网站,callee更能体现是调用自身的方法。

  而我个人的理解是,这点还防止了方法重名造成的危害,毕竟js没有重载╮(╯▽╰)╭

  所以还是写callee比较好。。

以上是关于callee的主要内容,如果未能解决你的问题,请参考以下文章

搞清arguments,callee,caller

js中的caller和callee属性

在C代码中将结构体变量作为参数传递效率忒低

javascript中caller与callee的作用以及用法

arguments.callee Function.callee arguments.caller总结

为啥 arguments.callee 会损害性能?