在递归时,都是在一定条件下调用函数自身
但这样蹲在一个问题,当函数名称被重新赋值,递归内部就调用不到这个函数,会报错;
function fbi(n) { if(n<=1) { return 1; }else { return n * fbi(n-1); } } fbi(4) //24
注意:
var newfbi = fbi;
fbi = null;
newfbi(4) //error;
所以如果不调用函数名,而是调用这个函数指针,就不会出错;那就是用arguments.callee
function fbi(n) {
if(n<=1) {
return 1;
}else {
return n * arguments.callee(n-1);
}
}
fbi(4) //24
但是这用方法已经不建议使用,那就使用闭包
+ 我的理解就是,不是当前函数递归,而是函数内部进行递归,然后将递归的值返回;
function fbi(n) {
return (function fn(){
n--;
if(n<=1) {
return 1;
}else {
return (n+1)*fn()//首先减一,所以这个地方比n要加1
}
})()
}
fbi(4)//24