递归 recursive

    递归函数是在一个函数通过名字调用自身的情况下构成的。

 1 function factorail(num)
 2 {
 3     if(num <= 1)
 4     {
 5          return 1;
 6     }
 7     else{
 8         return num * factorail(num-1);
 9     }
10 }

上面的代码虽然经典,在全局函数变量作为其引用的情况下,很容易出错。

var anotherFactorial = factorail;

factorial = null;

alert(anotherFactorail(4));

上面问题可以通过 arguments.callee 来解决。

因此最开始的递归函数可以改写成,

 1  function factorail(num)
 2  {
 3       if(num <= 1)
 4       {
 5            return 1;
 6       }
 7       else{
 8           return num * arguments.callee(num-1);
 9       }
10  }

其中,arguments.callee 是一个指向正在执行的函数的指针。

然而在严格模式下,上述代码仍然会导致错误,此时的解决方案是,通过函数表达式来达到相同的结果。

 1 var factorial = (function f(num)
 2 {
 3         if(num <= 1)
 4         {
 5             return 1;
 6         } 
 7        else 
 8        {
 9           return num * f(num -1);
10        }
11 })

上面创建的是一个名为f() 的命名函数表达式

原文地址:https://www.cnblogs.com/yiliweichinasoft/p/3687580.html