递归
- 递归函数必须能够引用它本身
- 递归是函数自己调用自己
- 一般都需要一个结束的条件
递归的认识
- 写出一个数的阶乘
function fn(n){
if(n===1){
return 1
}
return n*fn(n-1)
}
console.log(fn(4)) //4的阶乘
- 递归的报错
一般没有写结束条件(如上面的if(n===1){return 1})的情况下报错
Uncaught RangeError: Maximum call stack size exceeded
即内存溢出:超过了最大的堆栈大小
匿名递归函数(jQuery下个知识点)
- 很典型的,函数通过自己的名字调用自己(如上面的案例)
- 然而,匿名函数是没有名称。因此如果没有可访问的变量指向该函数,唯一能引用它的方式就是通过 arguments.callee
function createFn(){
return function(n){
if(n===1){
return 1
}
return n*arguments.callee(n-1)
}
}
var f1 = createFn()
console.log(f1(4))
然而,这实际上是一个非常糟糕的解决方案,另外