递归:
递归函数在定义的时候需要调用自己,因此会用到自己的函数名;但是在js中会出现如下的问题:
<pre>
function factorial(num) {
if (num <= 1)
return 1;
else
return num * factorial(num - 1);
}
var anotherFactorial = factorial;
factorial = null;
anotherFactorial(6);
//由于迭代过程中需要用到factorial,但该值已被赋值为空,所以会出错
</pre>
解决方法:有两种方式可以解决该问题
1.使用 arguments.callee:
该参数指向一个正在执行的函数的指针,因此可以用它来实现函数对自身的递归调用。
<pre>
function factorial(num) {
if (num <= 1)
return 1;
else
return num * arguments.callee(num - 1);
}
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(6));
</pre>
这种写法之下,即便factorial被赋值为空,依然可以引用自身来实现递归。
2.使用命名函数表达式
但是在严格模式之下,不可以访问arguments.callee属性,因此可以使用命名函数表达式:
<pre>
eg:var factorial = (function f(num) {
if (num <= 1)
return 1;
else
return num * f(num - 1);});
</pre>
网友评论