1.上图:为了降低函数中的耦合度,我采用了arguments.callee指向当前函数。这里的 return num*arguments.callee(num-1) 等价于 return num*factorial(num-1)好处是无论引用函数时使用的是什么名字都可以保证正常完成调用。我为了测试是否真的如此,就把factorial函数给重写了返回0;问题来了:当使用表达式把一个函数赋值factorial变量时确实成功了:一个函数返回0,另一个函数返回120;当使用函数声明的方式定义factorial函数同样返回0时,却两个函数都返回0;函数表达式和函数声明的问题还是其他问题?
1 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
因为函数声明会被提前
你以为是这样的:
function factorial (num) {
if (num <= 1)
// ...
}
var factorial_1 = factorial;
function factorial (num) {
return 0
}
其实是这样的
function factorial (num) {
if (num <= 1)
// ...
}
function factorial (num) {
return 0
}
var factorial_1 = factorial;
添加回答
举报
0/150
提交
取消
