JavaScript中递归函数的问题解决

黄舟
黄舟 原创
2017-11-18 11:28:48 961浏览

在之前的文章中我们给大家介绍了关于JavaScript递归函数的使用,那么我们在使用JavaScript中的递归函数的时候,会出现一些问题,今天就给大家举个例子来介绍下JavaScript中递归函数的问题!

先定义一个递归函数,求正整数N的阶乘:

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

接着定义另外一个变量指向这个函数,然后将该函数置为null

var anotherFactorial=factorial;
factorial=null;
alert(anotherFactorial(4));//报错

为什么会报错呢?因为在函数factorial内部,递归调用了factorial本身,而上面的代码将factorial置为null了,所以它不再是一个function。这听上去有点奇怪,不过javascript内部就是这样处理的。怎么解决这个问题呢?一个方法是用函数内部的arguments.callee替换函数本身  

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

这样一来不管将函数赋值给哪个变量,之后的调用都不会有问题。因此,建议在递归函数内部用arguments.callee代替函数本身。或者也可以用函数表达式解决这个问题:

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

这样不论是否将变量factorial变量赋值给另外的变量,递归调用都不会有问题。

总结:

通过本文的详细介绍,相信小伙伴们对JavaScript中递归函数的问题有了一个新的了解,希望对你的工作有所帮助!

相关推荐:

JavaScript中递归函数的使用详解


JavaScript中递归函数的解析与说明


JavaScript中递归函数的细化认识以及示例代码分享

以上就是JavaScript中递归函数的问题解决的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。