关于JavaScript递归函数的小注意

下面是常规正确的递归写法,用经典的阶乘举例子

function factorial(){
    if(num<=1){
       return 1;
  }else { 
      return num * factorial(num-1)
    }
}
这个是完全正确的写法,但是由于这种写法耦合性比较高,我们希望能解耦,让函数名字完全编程自由的存在形式。

接下来是解耦的写法,这个都是高程上面的只是我觉得很好的一个小细节,所以叫记录一下。

function factorial(){
    if(num<=1){
       return 1;
  }else { 
      return num * arguments.callee(num-1)
    }
}
经过这样的改变之后,变量名就不会受影响了,随便附一个新的名字
var func = factorial;
factorial = function(){
  return 0
}
alert(func(5));  //120
alert(factorial(5)) //0

下面这个也是关于arguments.callee解耦的一个简单的例子

function print (){
     source()
}
function source(){
    alert(source.caller)
}
print()
------------------------------
因为上面代码具有一定耦合性,所以解耦写法
 function print (){
     source()
}
function source(){
    alert(arguments.callee.caller)
}
print()

你可能感兴趣的:(关于JavaScript递归函数的小注意)