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比较好。。

posted @ 2016-12-05 11:17  晨落梦公子  阅读(243)  评论(0编辑  收藏  举报