一、补充知识 argument.callee
首先看一个经典的阶乘例子(用递归实现,当然你也可以用迭代~):
<script type="text/javascript"> function factorial(num) { if(num < 1) { return 1; } else { return num*factorial(num-1); } } </script>
arguments对象的callee的属性是一个指针,指向拥有这个arguments对象的函数。
如下:
<script type="text/javascript"> function factorial(num) { if(num <= 1) { return 1; } else { return num*arguments.callee(num - 1); } } </script>
二、万事俱备,实现javascript匿名透明递归
(以下内容摘自luoluo牛的博客)
什么是匿名透明递归,就是递归调用的时候不需要知道函数名,也不需要理解参数。用到的知识点:2、Function对象的apply方法(见MSDN手册),调用一个方法,并传入this指针和arguments对象,这样就实现参数透明传递
实现:
<script type="text/javascript"> (function(s, n) { alert(n); if (n < 5) { n ++; arguments.callee.apply(this, arguments); } })("test", 0); </script>
三、参考:
1.http://www.cnblogs.com/luoluo/archive/2009/04/20/1440054.html
2.http://msdn.microsoft.com/zh-cn/library/4zc42wh1(v=vs.94).aspx
3.http://www.w3cmm.com/javascript/arguments-callee.html
javascript匿名透明递归,布布扣,bubuko.com
原文:http://blog.csdn.net/wusuopubupt/article/details/22415179