深克隆的一些理解

深克隆的一些理解

相关代码:

<script>
        // 原数组
        var arr1 = [33, 44, 11, 22, [33, 44, [77, 88, 99]]];

        // 这个函数会被递归
        function deepClone(arr) {
            // 结果数组
            var result = [];
            // 遍历数组的每一项
            for (var i = 0; i < arr.length; i++) {
                // 类型判断,如果遍历到的项是数组
                if (Array.isArray(arr[i])) {
                    // 递归
                    result.push(deepClone(arr[i]));
                } else {
                    // 如果遍历到的项不是数组,是基本类型值,就直接推入到结果数组中
                    // 相当于是递归的出口
                    result.push(arr[i]);
                }
            }
            // 返回结果数组
            return result;
        }
        // 测试一下
        var arr2=deepClone(arr1);
        console.log(arr2);

        // 是否藕断丝连
        console.log(arr1[4]==arr2[4]);
        arr1[4].push(99);
        console.log(arr2[4]);
    </script>

问题描述:

我对判断语句的理解:如果是数组,则把数组推进result(自动在result形成二维数组),因为是数组则又可以进行递归,得到的数值推进二维数组①。

如果是基本类型数值,则直接把数值推进result②。

顺序是①→②→①递归。

                if (Array.isArray(arr[i])) {
                    // 递归
                    result.push(deepClone(arr[i]));       ①
                } else {
                    // 如果遍历到的项不是数组,是基本类型值,就直接推入到结果数组中
                    // 相当于是递归的出口
                    result.push(arr[i]);                  ②
                }

这个返回,不就是定义函数的内部结果形式?就相当于之前的 return a+b,调用函数sum(3,4)就可得到7一样道理吧?我函数内部返回得一个结果模式,最后直接调用函数即可。

另外这个返回是for循环结束之后的一个返回对吗?

 // 返回结果数组
  return result;


正在回答

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

1回答

同学你好,解答如下:

1、如果arr[i]这项是数组,则会执行result.push(deepClone(arr[i]))这句代码,这句代码是再次调用deepClone方法,并把deepClone的返回结果推入到result这个数组中。

2、return result是deepClone函数的返回值,执行完一次deepClone函数,就会得到一个result数组。

老师将这段代码的执行结果整理成了图文节,同学可以看完再理解一下,链接:https://class.imooc.com/lesson/1625#mid=45591

祝学习愉快~

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

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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