第一种 function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } //这样定义问题是函数的执行与函数名factorial紧紧耦合在了一起 alert(factorial(5));//120
第二种 function factorial(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } } alert(factorial(5));//120 //2这样可以消除耦合
第三种 var fn=(function f(num){ if(num<=1){ return 1; }else{ return num*f(num-1); } }); //使用arguments.callee时,会在严格模式下报错,严格模式下不能通过脚本访问arguments.callee,可以用命名函数表达式来达成相同结果 alert(factorial(5));//120