javascript - js实现阶乘函数的问题
ringa_lee
ringa_lee 2017-04-10 14:36:20
[JavaScript讨论组]

书上说下面这样写不好。

function factorial(num) {
    if(num <= 1) {
        return 1;
    } else {
        return num * factorial(num - 1); 
    }
}

要写成这样才好:

function factorial(num) {
    if(num <= 1) {
        return 1;
    } else {
        return num * arguments.callee(num - 1); 
    }
}

为什么?

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
黄舟

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

PHPz

第二种的好处,Joe3已经说了。
但坏处是:arguments.callee的性能不佳,已经被标准所摈弃了。
所以其实第一种反而是目前标准推荐的写法。

考虑到你不太可能经常变换函数名称,而且即使变换了,顺手把递归部分一起改掉,也不会是什么麻烦事,所以还是按标准写吧。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号