为何一定要加return?不加return得不到递归前push的值是什么意思啊?

为何一定要加return?不加return得不到递归前push的值是什么意思啊?

  <script>

        var obj1={

            a:1,

            b:2,

            c:[33,44,{

                m:55,

                n:66,

                p:[77,88]

            }]

        };

      

             function deepClone(o){

                 if(Array.isArray(o)){

                     var result=[];

                     for(var i=0;i<o.length;i++){

                         result.push(deepClone(o)[i]);

                     }

                 } else if(typeof o=="object"){

                     var result={};

                     for(var k in o){

                        result[k]=deepClone(o[k]);

                     }

                 }

                 else{var result=o;}

                 //为何一定要加return?不加return得不到递归前push的值是什么意思啊?

                 return result;

             }

             var obj2=deepClone(obj1);

             console.log(obj2);

    </script>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2021-01-25 15:49:54

同学你好,老师的意思是: 如果不加return,调用deepClone方法会返回默认值undefined,那么result.push(deepClone(o[i]));这句代码push的值是undefined,所以无法实现效果。

另外,同学代码中调用deepClone传递参数有误,建议修改:

http://img1.sycdn.imooc.com//climg/600e781c096da1a005650164.jpg

祝学习愉快~


  • 提问者 wt涛 #1

    为什么不加return,调用deepClone方法返回是默认值undefined?

    2021-01-25 17:04:09
  • 好帮手慕慕子 回复 提问者 wt涛 #2

    同学你好,js语法规定的,当函数中没有使用return设置返回值时,默认返回的是undefined。

    老师举一个简单的示例,帮助同学更好的理解,声明一个add函数,函数内没有设置return,如下图所示,

    http://img1.sycdn.imooc.com//climg/600e922f09d3f9bd03200094.jpg

    调用add函数,将返回结果赋值给res,最终输出res的结果为undefined

    http://img1.sycdn.imooc.com//climg/600e923a09aecc3c01860064.jpg

    祝学习愉快~

    2021-01-25 17:43:27
  • 提问者 wt涛 回复 好帮手慕慕子 #3

    能理解成递归中没使用return的话,默认返回值是undefined?

    2021-01-25 18:32:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师