小编今天来给各位同学介绍js arguments.callee实现匿名函数的递归具体操作方法与实例,有需要了解的朋友可参考参考。
实现递归的算法大家都是很熟悉的,比如一个求0到n的和的递归函数如下:
代码如下 |
|
var fn=function(n){
if(n>0) return n+fn(n-1);
return 0;
}
alert(fn(10))
|
当然这是一个很简单的函数,如果在一个很复杂的程序中我们可能只需要调用一次该函数,为了函数的精简我们当然要努力较少函数名的定义,这是很自然会想到用匿名函数来直接执行。但是如果是匿名函数如何实现递归?arguments.callee正好派上用场,他指代的就是当前执行的函数的引用。
利用匿名函数实现的递归如下:
代码如下 |
|
var s=(function(n){
if(n>0) return n+arguments.callee(n-1);
return 0;
})(10);
alert(s)
|
arguments.callee()是一个指针,指向拥有这个arguments的函数!其应用在经典的阶乘函数中可以体现出来:
代码如下 |
|
<script type="text/javascript">
//阶乘函数
function factorial(num){ //factorial只是指向该执行环境前端变量对象的一个指针
if(num<1){
return 1
}else{
return num*arguments.callee(num-1);//callee属性是一个指针,指向拥有这个arguments的函数
}
}
var anotherFunc=factorial;
factorial=function(){ //变量factorial,引用类型值,指向内存中另一个变量对象,非原先的变量对象
return "abc";
}
//function factorial(){ //区别于上面的函数表达式,修改的是原先的变量对象,会直接影响到anotherFunc
// return "abc";
/
打赏
打赏
扫码打赏,你说多少就多少
打开支付宝扫一扫,即可进行扫码打赏哦
百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!
|