javascript的递归调用 特殊指针arguments.callee

来源:互联网 发布:mac pppoe鉴定失败 编辑:程序博客网 时间:2024/04/29 17:23
/**
 * Created by jack on 14-11-23.
 */


/*
    javascript的递归调用
 */


function factorial(num)
{
    if(num<1){
        return 1;
    }else{
        return num*factorial(num-1);
    }
}


/*
这段会报错执行不了,


var anotherFactorial = factorial;
factorial=null;
alert(anotherFactorial(4));


以上代码把factorial保存在变量anotherFactorial中,然后factorial设置为null,结果指向原始函数的引用只剩下一个,
但接下来调用anotherFactorial时,由于必须执行factorial,而factorial已经不再是函数,所以就导致了错误.
arguments.callee可以解决这个问题,arguments.callee是一个指向正在执行的函数的指针。


*/


function factorial(num)
{
    if(num<1){
        return 1;
    }else{
        return num*arguments.callee(num-1);
    }
}


var anotherFactorial=factorial;
factorial=null;
alert(anotherFactorial(4));
0 0
原创粉丝点击