"use strict";
//方法1
function factorial(num){
if(num<=1){
return 1;
}else{
return num*factorial(num-1);
}
}
//console.log(factorial(5));
const anotherFactorial = factorial;
factorial=null;
console.log(anotherFactorial(5));
//报错信息 "object is not a function";
/*分析先把factorial()函数保存在变量anotherFactorial中,
然后把factorial设置成为null 此时factorial不再是函数,不过
anotherFactorial()调用的时候必须先执行factorial()函数 所以就会报错*/
//2解决方案 非严格模式
//arguments.callee是一个指向正在执行函数的指针
function factorial(num){
if(num<=1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
//console.log(factorial(5));
const anotherFactorial = factorial;
factorial=null;
console.log(anotherFactorial(5));
//3方案严格模式不能访问arguments.callee 所以会报错
var factorial = (function f(num){
if (num<=1){
return 1;
}else{
return num*f(num-1);
}
})
var anotherFactorial = factorial;
factorial=null;
console.log(anotherFactorial(5));