1.递归:
function digui(num) {
if (num <= 1) {
return 1;
} else {
return num*digui(num-1); // 报错
}
}
var d = digui;
digui = null;
d(3);
改进:用arguments.callee(num-1) 代替 digui(num-1) arguments.callee()是指向参数所在的函数的指针,code如下:
function digui(num) {
if (num <= 1) {
return 1;
} else {
return num*arguments.callee(num-1);
}
}
var d = digui;
digui = null;
d(3)
但是,arguments.callee在严格模式下会报错,故用命名函数表达式来代替:
var digui = (function f(num) {
"use strict";
if (num <= 1) {
return 1;
} else {
return num * f(num-1);
}
});
命名函数表达式是最完美的解决方案