请对比方案1、2的写法
function factorV1(num){
// 方案一
return num===1?num:factorV1(num-1)*num;
}
function factorV2(num){
// 方案二
return num===1?num:arguments.callee(num-1)*num;
}
方案二,使用arguments.callee可以降低一次耦合,如果有一天函数改名了,或者被重新复制给其他变量了,底层代码不需要做任何改动。
但是,使用方案一底层代码依赖上层的函数名,二者必须一致,但是又没有用代码控制这种一致性。