40 lines
902 B
Markdown
40 lines
902 B
Markdown
# 递归
|
||
|
||
### 发生前提:
|
||
递归是在一个函数通过名字调用自身的情况下发生的
|
||
如:
|
||
```
|
||
function a(n){
|
||
if(n<=1){
|
||
return 1
|
||
}else{
|
||
return num*a(n-1)
|
||
}
|
||
}
|
||
|
||
```
|
||
这是一个经典的递归阶乘函数,但是接下来的操作却可能会导致他出错
|
||
|
||
```
|
||
function a(n) {
|
||
if (n <= 1) {
|
||
return 1
|
||
} else {
|
||
return n * a(n - 1)
|
||
}
|
||
}
|
||
console.log(a(5)) //120
|
||
|
||
var cheng=a
|
||
a=null
|
||
console.log(cheng(5))// : a is not a function
|
||
|
||
|
||
```
|
||
以上代码把a保存在一个变量(cheng)中,然后将a赋值为null
|
||
在cheng执行的过程中 必然会执行到a (在cheng 中else代码块的函数名字改不了)
|
||
但是此时a已经不是函数了,所以会报错 a is not a function
|
||
|
||
|
||
上面问题的解决措施:
|