需要理解的知识点:
1.值传递与引用传递
(1)值传递:基本类型数据是直接存储在栈中的,当你传递的数据是基本类型时,本质上是直接复制这个数据的值.
(2)引用传递(地址传递):引用类型的数据是存储在堆中的,引用类型的地址存储在栈中,当你传递引用类型时,本质上传递的是地址,结果是两个变量共用同一组数据的地址.
2.递归函数
(1)通过调用自己来解决问题,则该函数称为递归函数。
案例代码如下
<script>
function deepCopy(arr) {
//定义一个空的新数组,也就是一个新地址
var arr1 = [];
for (var i in arr) {
//条件判断 遍历到的数据是否为二级数组,如果是 则执行以下操作
if (Array.isArray(arr[i])) {
//var一个list 接收回调函数返回的二级数组中的内容,并push到新数组中
var list = deepCopy(arr[i]);
arr1.push(list);
//反之则直接插入到arr1数组中
}else {
arr1.push(arr[i]);
//测试改变原数组arr,新数组arr1有没有被改变
arr[i]+=1;
}
}
console.log(arr);
return arr1;
}
var res = deepCopy([1, 2, 2, 2, [1, 8, 6, 4], 2, 9]);
console.log(res);
</script>