js函数递归

一个常见的递归函数:

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

这个函数表面看起来不会有什么问题,但是下面的代码却可能会导致它出错:

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

这种情况可以使用arguments.callee解决:

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

因为arguments.calee是一个指向正在执行的函数的指针,因此我们可以用它来实现对函数的递归调用。

在严格模式下不能使用arguments.callee,访问这个属性会报错。但是我们可以使用命名函数表达式来达到相同的效果:

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

 

你可能感兴趣的:(递归,JavaScript)