result.push(deepClone(arr[i])),老师这句我有点不理解,

result.push(deepClone(arr[i])),老师这句我有点不理解,

 var arr = [1, 2, [3, 4]];

        function deepClone(arr) {

            var result = [];

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

                    程序开始执行,如果循环到ifArray.isArray 判断是否为数组 

                if (Array.isArray(arr[i])) {

                    result.push(deepClone(arr[i]))

                 如果是数组,就执行, result.push 这个句话的意思是重新把[ 3, 4 ]

                重新传入函数执行体吗,然后 在执行,if(Array.isArray(arr[i]))的时候判断不是数组,

                那么就执行下一句,else,

                我不太理解的是为什要用,result去push传入, 

                我又想了一下,递归的执行机理,用result去传入,

               等执行完毕,就会按照原来的样子一层一层返回,

              不知道我理解的对不对


                } else {

                    result.push(arr[i])

                }

            }

            return result;

        }

        var arr2 = deepClone(arr);

        arr2[2].push(99999)

        console.log(arr2[2] == arr[2]);

        console.log(arr);



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

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

1回答
好帮手慕然然 2021-11-21 13:27:42

同学你好,可以参考以下思路来理解:

前两次for循环遍历结束后,result结果应该是[1,2],等到第三次遍历时result应该push一个数组[3,4],才能得到[1, 2, [3, 4]]的结果,而数组[3,4]是通过调用deepClone()方法得到的。

同学可以这样想,假如只克隆[3,4]的话,需要执行deepClone([3,4]),此时得到的结果是[3,4],然后如果要把[3,4]放到数组result中,那么就要result.push([3,4]),其实就是result.push(deepClone([3,4]))。

另外,同学对于递归的理解是正确的,不过需要再好好理解一下这段代码。

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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