在这个方法中:
假如我要拷贝的数组是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]
不变成了一维数组?有点蒙,求指点?
没看懂你这个
[0,1]
是怎么出来的copyArr
函数每执行一次都会创建一个数组,第一次执行创建了最外层的数组,当判断条件到if
是obj[0]
也就是[1,2]
符合判断条件。这个时候也就相当于是第一次创建的out[0] = copyArr([1, 2])
,又一次执行copyArr
重新创建了一个数组,这次判断条件走的是else
所以第一次完整执行完毕之后应该是[[1, 2]]
后续重复执行,最终输出
[[1, 2], [3, 4]]