美文网首页
JavaScript 之递归问题的解决

JavaScript 之递归问题的解决

作者: 闲闲呢 | 来源:发表于2016-05-16 15:45 被阅读0次

    递归:

    递归函数在定义的时候需要调用自己,因此会用到自己的函数名;但是在js中会出现如下的问题:
    <pre>
    function factorial(num) {
    if (num <= 1)
    return 1;
    else
    return num * factorial(num - 1);
    }
    var anotherFactorial = factorial;
    factorial = null;
    anotherFactorial(6);
    //由于迭代过程中需要用到factorial,但该值已被赋值为空,所以会出错
    </pre>

    解决方法:有两种方式可以解决该问题
    1.使用 arguments.callee:
    该参数指向一个正在执行的函数的指针,因此可以用它来实现函数对自身的递归调用。
    <pre>
    function factorial(num) {
    if (num <= 1)
    return 1;
    else
    return num * arguments.callee(num - 1);
    }
    var anotherFactorial = factorial;
    factorial = null;
    alert(anotherFactorial(6));
    </pre>
    这种写法之下,即便factorial被赋值为空,依然可以引用自身来实现递归。
    2.使用命名函数表达式
    但是在严格模式之下,不可以访问arguments.callee属性,因此可以使用命名函数表达式:
    <pre>
    eg:var factorial = (function f(num) {
    if (num <= 1)
    return 1;
    else
    return num * f(num - 1);});
    </pre>

    相关文章

      网友评论

          本文标题:JavaScript 之递归问题的解决

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