递归
递归函数是在一个通过名字调用自身情况下构成的,例如:
1 function a(num){ 2 if(num <=1 ){ 3 return 1; 4 }else{ 5 return num*a(num-1); 6 } 7 }
这是一个典型的递归阶乘函数,虽然这个函数看起来没有什么问题,但下面的代码可能会导致其它的问题:
1 var value = a; 2 a = null; 3 alert(value()); //出错
以上代码先把a()函数保存在变量value中,然后将a变量赋值为null,结果指向原始函数的引用只剩下一个,
但接下来使用value()来,由于a 以不在是函数,所有会导致错误发生。
所以为了避免这个问题发生,可以使用:
arguments.callee 来解决这个问题
1 function a(num){ 2 if(num <=1){ 3 return 1; 4 }else{ 5 return num * arguments.callee(num-1); 6 } 7 }
var value = a;
a = null;
alert(value(4)); //24
通过使用 argument.callee代替函数名,可以确保无论怎样调用函数都不会出问题,
因此,在编写递归函数时,使用arguments.callee总比使用函数根保险。
from :javascript高级程序设计
浙公网安备 33010602011771号