javascript - 关于JS递归操作
迷茫
迷茫 2017-04-11 11:53:31
[JavaScript讨论组]
function f(num){
    if(num<=1){
      return 1;
    }else{
      return num * arguments.callee(num-1);
    }
}

alert(f(5)); //120

这里为什么结果会是120  arguments.callee(num-1);callee指向的是f  
那么这个结果不应该是f(num-1) //5-1=4  
为什么执行的是5*4*3*2*1 呢 原理是什么

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
阿神

https://developer.mozilla.org...

arguments.callee指向当前正在被执行的函数,在这里也就是f

PHP中文网

因为arguments.callee指向函数本身,因此上面的函数f等价于如下

function f(num){

    // 如果num小于等于1,则终止递归
    if(num<=1){
      return 1;
    }else{
    
      // 如果num比1大,则继续递归
      return num * f(num-1);
    }
}

// 执行f(5),其实就是进行了一个 5 * 4 * 3 * 2 * 1的运算
f(5);

因此最终的结果自然是120了。

天蓬老师

因为是递归

当递归出口条件没达到会一直执行这个函数;

第一次是:5 x arguments.callee(4);

第二次是:5 x 4 x arguments.callee(3);

第三次是:5 x 4 x 3 x arguments.callee(2);

第四次是:5 x 4 x 3 x 2 x arguments.callee(1); //最后达到条件退出了

所以得到的结果是 5x4x3x2x1 = 120;

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

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