湖南网站推广,python基础语法手册,工作室网站开发,贵州做网站最近在看《Professional Javascript For Web Developers 3rd Edition》#xff0c;看到关于递归函数调用的问题#xff0c;在此记录备忘#xff1a; 先定义一个递归函数#xff0c;求正整数N的阶乘#xff1a; function factorial(num){if(num1)return 1;return num*f… 最近在看《Professional Javascript For Web Developers 3rd Edition》看到关于递归函数调用的问题在此记录备忘 先定义一个递归函数求正整数N的阶乘 function factorial(num){if(num1)return 1;return num*factorial(num-1);
}接着定义另外一个变量指向这个函数然后将该函数置为null var anotherFactorialfactorial;
factorialnull;
alert(anotherFactorial(4));//报错为什么会报错呢因为在函数factorial内部递归调用了factorial本身而上面的代码将factorial置为null了所以它不再是一个function。这听上去有点奇怪不过javascript内部就是这样处理的。怎么解决这个问题呢一个方法是用函数内部的arguments.callee替换函数本身 function factorial(num){if(num1)return 1;return num * arguments.callee(num-1);
} 这样一来不管将函数赋值给哪个变量之后的调用都不会有问题。因此建议在递归函数内部用arguments.callee代替函数本身。或者也可以用函数表达式解决这个问题 var factorial (function f(num){if(num1)return 1;return num*f(num-1);
}); 这样不论是否将变量factorial变量赋值给另外的变量递归调用都不会有问题。 转载于:https://www.cnblogs.com/lzkwin/archive/2013/03/10/javascript.html