function factorial(num){
if(num <= 1 ){
return 1;
}else{
return num * factorial(num-1)
}
}
- 上面就是一个递归函数,递归函数通常的形式是一个函数通过名称调用自己。
function factorial(num){
if(num <= 1 ){
return 1;
}else{
return num * factorial(num-1)
}
}
let anotherFactorial = factorial;
factorial = null;
console.log(anotherFactorial(4));
- 因为factorial函数中调用了factorial,则anotherFactorial函数也调用了factorial。但是factorial已经设置为null,已经不是函数了,所以会报错,我们可以通过arguments.callee来避免这个问题。
const factorial = (function f(num){
if(num <= 1 ){
return 1;
}else{
return num * f(num-1)
}
})
- 在严格模式下不能访问arguments.callee,因此访问会报错。可以通过使用命名函数表达式来达到目的。