欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

JavaScript中递归函数的问题解决

程序员文章站 2022-03-31 15:29:34
...
在之前的文章中我们给大家介绍了关于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中递归函数的问题解决的详细内容,更多请关注其它相关文章!