js实现阶乘函数的问题

书上说下面这样写不好。
functionfactorial(num){
if(num<=1){
return1;
}else{
returnnum*factorial(num-1);
}
}
要写成这样才好:
functionfactorial(num){
if(num<=1){
return1;
}else{
returnnum*arguments.callee(num-1);
}
}
为什么?
慕姐8265434
浏览 336回答 2
2回答

狐的传说

第一种实现方式依赖于外层函数的名称factorial,而factorial可能会在后来被其他值改写第二种实现方式不依赖于函数的名称,而是用arguments对象的callee属性来指向外层函数

慕的地6264312

第二种的好处,Joe3已经说了。但坏处是:arguments.callee的性能不佳,已经被标准所摈弃了。所以其实第一种反而是目前标准推荐的写法。考虑到你不太可能经常变换函数名称,而且即使变换了,顺手把递归部分一起改掉,也不会是什么麻烦事,所以还是按标准写吧。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript