递归函数就是在运行过程中通过函数名自己调用自己。
function add(num){return num<0?num:num+add(num-1);}
console.log(add(4));//9
var addCopy = add;
add = null;
console.log(addCopy(4));//报错Uncaught TypeError:add is not a function
函数
add
在赋值为null
之前表面看似没有问题,而在将函数add()
保存到变量addCopy
中,然后将add
置为null
,结果指向原函数的引用只剩下一个,由于必须执行addCopy()
,而add
已不再是函数,所以就会导致错误,在这种情况下,使用arguments.callee
可以解决这个问题。
**arguments.callee
是一个指向正在执行的函数指针,因此可以用它来实现对函数的递归调用。**
构成递归的条件:
-
子问题跟原始问题相同,且更为简单;
-
在递归过程中,必须有一个明确的条件判断递归的结束,也就是递归出口。