/*********原始递归写法*********/
function digui(num){
if(num <= 1){
return 1;
}else{
return num*digui(num-1);
}
}
var result_1 = digui(5);//120
//将函数的指针传递给另一个值
var digui_copy = digui;
var result_2 = digui_copy(5);//120
//digui变量指向的函数发生改变
digui = function(){
return 0;
}
var result_3 = digui_copy(5);//0
//使用arguments参数的callee的属性 解耦 非严格模式下的写法,严格模式下报错
function digui(num){
if(num <= 1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
var result_1 = digui(5);//120
//将函数的指针传递给另一个值
var digui_copy = digui;
var result_2 = digui_copy(5);//120
//digui变量指向的函数发生改变
digui = function(){
return 0;
}
function digui(num){
if(num <= 1){
return 1;
}else{
return num*digui(num-1);
}
}
var result_1 = digui(5);//120
//将函数的指针传递给另一个值
var digui_copy = digui;
var result_2 = digui_copy(5);//120
//digui变量指向的函数发生改变
digui = function(){
return 0;
}
var result_3 = digui_copy(5);//0
//使用arguments参数的callee的属性 解耦 非严格模式下的写法,严格模式下报错
function digui(num){
if(num <= 1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
var result_1 = digui(5);//120
//将函数的指针传递给另一个值
var digui_copy = digui;
var result_2 = digui_copy(5);//120
//digui变量指向的函数发生改变
digui = function(){
return 0;
}
var result_3 = digui_copy(5);//120
/**********在严格模式和非严格模式下的通用写法**********/
var digui = (function f(n){
if(n <= 1){
return 1;
}else{
return n*f(n-1);
}
});
var result_1 = digui(5);
var copy_digui = digui;
var result_2 = copy_digui(5);
digui = null;
var result_3 = copy_digui(5);