递归
function factorial(num){
if (num <= 1){
return 1;
} else {
return num * factorial(num-1);
}
}
// 问题
var anotherFactorial = factorial;
factorial = null;
anotherFactorial(); // 报错
非正式的解决方案 arguments.callee
arguments.callee
是一个指向正在执行的函数的指针
function factorial(num){
if (num <= 1) {
return 1;
} else {
return num * arguments.callee(num-1);
}
}
注意: 在严格模式下会导致错误,并且auguments
是个很大的对象,频繁创建会造成浏览器性能损耗
终极解决方案
申明一个函数,添加函数名称,调用此函数名称就可以
var factorial = (function f(num){
if (num <= 1) {
return 1;
} else {
return num * f(num-1);
}
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。