JavaScript的函数递归

        /*********原始递归写法*********/
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);


猜你喜欢

转载自blog.csdn.net/wdhouyigege/article/details/80576682