下面是常规正确的递归写法,用经典的阶乘举例子
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()
网友评论