探究深拷贝,不是很懂?

在这个方法中:
假如我要拷贝的数组是arr:[[1,2],[3,4]]

   copyArr(obj) {
                var out = [],
                    i = 0,
                    len = obj.length;
                for (; i < len; i++) {
                    if (obj[i] instanceof Array) {
                        out[i] = this.copyArr(obj[i]);
                    } else out[i] = obj[i];
                }
                return out;
            },

那么执行到第一轮的时候,obj[i]就应该为[1,2],if (obj[i] instanceof Array) {}成立
重新执行copyArr(obj[i]),此时的obj[i]为[1,2],第二轮就变成了obj0实际为obj0,是1,那么执行else out[0]=obj0,out[1]=obj0,依次类推那out不成为了[0,1]
不变成了一维数组?有点蒙,求指点?

阅读 1.3k
2 个回答

没看懂你这个 [0,1] 是怎么出来的
copyArr 函数每执行一次都会创建一个数组,第一次执行创建了最外层的数组,当判断条件到 ifobj[0] 也就是[1,2] 符合判断条件。这个时候也就相当于是第一次创建的 out[0] = copyArr([1, 2]),又一次执行 copyArr 重新创建了一个数组,这次判断条件走的是 else 所以第一次完整执行完毕之后应该是 [[1, 2]]

后续重复执行,最终输出 [[1, 2], [3, 4]]

你的this干嘛用的啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题