`Web前端必做笔记之一:对象拷贝(三) 深度拷贝
<script>
//浅拷贝解决的问题是:如果是原始类型,全都拷贝过来,如果是引用类型就无法进行拷贝,所以就要进行一个深度的拷贝。这就是浅拷贝和深拷贝的区别
//在了解深度拷贝之前,我们需要知道递归
//什么是递归?
//简单来说自己调用自己
function fun(){
fun();
}
fun(); //这样就会一直调用自己,没有结束
//实现一个计算累加功能
function fun(n){
if(n == 1){
return 1;
}else{
return n + fun(n - 1)
}
}
let result = fun(3);
console.log(result); //6 ,为啥会打印出6呢,这就是递归的基本概念,自己调自己
/*
fun(1): 1
fun(2): 2 + fun(1) => 也就是 2+1 = 3
fun(3): 3 + fun(2) => 也就是 3+2+1 = 6
*/
</script>
<script>
const student1 = {
name:"小明",
age:2,
girlfriend:{
name:"小红"
}
}
//现在呢,姓名,年龄,女朋友,都要进行克隆
function copy(obj){
let newObj = {};
for( let i in obj ){
//判断这个obj传进来的值是不是一个对象, 是对象就递归继续克隆, 不是对象,就浅拷贝
if(obj[i] instanceof Object){
newObj[i] = copy(obj[i]); //这就是再克隆一遍再赋值。
}else{
newObj[i] = obj[i]; //浅拷贝
}
};
return newObj;
}
const student2 = copy(student1);
student1.girlfriend.name = "小花";
console.log(student1); //小明 , 2,小花
console.log(student2); //小明 , 2,小红
</script>