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
同学你好,可以参考以下思路来理解:
前两次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 星