递归

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

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高级程序设计

 

posted on 2016-01-16 20:30  Mc525  阅读(133)  评论(0)    收藏  举报

导航