javascript - js执行环境栈的问题
高洛峰
高洛峰 2017-04-11 12:58:16
[JavaScript讨论组]
function add(i){
    if(i==3){
        return i;
    }
    else{
         add(++i);
    }
alert(add(3))//3
alert(add(0))//undefined

我知道这个是关于执行环境栈的问题,但是是具体原因还是不太明白求高手详细分析下它的机制,我用debugger看了add(0)当i==3走了return为什么函数还继续?然后i再减小到1弹出结果undefined,为什么不是i为0时弹出?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
PHP中文网

要理解每次递归调用函数时都是创建新的堆栈,执行add(0)会递归调用add四次,而你只在最里面那一层return,其余的都没有return因此返回undefined
查看函数调用时的堆栈帮助理解

只要再加个return就行了

 function add(i) {
        if (i == 3) {
            return i;
        }
        else {
            return add(++i); //加上return
        }
    }
PHP中文网

我在慕课网已经回答了你的问题,你先看看能理解不能。不理解可以继续追问。回头我会把慕课网上的内容拷贝过来

巴扎黑

简单解:递归几层,那出来也得几层,不然调用堆栈就无法配对了

那为何是 undefined 呢?因为 else 体里面没有 return,所以不管多少层递归,永远都是 undefined

然。

return add(++i);

其结果会是什么呢?留给题主吧!

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

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