Javascript中递归、浅拷贝和深拷贝

175 阅读1分钟

递归

什么是递归?

如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。简单理解:函数内部自己调用自己这个函数就是递归函数

递归函数的作用和循环效果一样 由于递归很容易发生“栈溢出”错误( stackoverflow ),所以必须要加退出条件 return。

function fn(num) {
  console.log(num);
  if (num > 10){
      return num;
      } 
  else{
      num++;
      fn(num);
      };

}

浅拷贝 Object.assign(newObj, targetObj)

var o = {
  id: 1,
  name: "汽车",
  product: {
    id: 2,
    name: "冰箱",
  },
};

var obj = {};
Object.assign(obj, o); //将o浅拷贝给obj
console.log(obj);//{ id: 1, name: '汽车', product: { id: 2, name: '冰箱' } }

浅拷贝只是拷贝了一层,当对象里面的属性也是一个对象时,这个属性对象是将地址赋值给拷贝的对象。

深拷贝

var o = {
  id: 1,
  name: "汽车",
  product: {
    id: 2,
    name: "冰箱",
  },
};

var obj = {};
function deepCopy(newObj, targetObj) {
  for (var k in targetObj) {
    if (targetObj[k] instanceof Array) {   //由于数组也属于对象,因此要先把数组的判断放在前面
      newObj[k] = [];  
      deepCopy(newObj[k], targetObj[k]);
    } else if (targetObj[k] instanceof Object) {
      newObj[k] = {};
      deepCopy(newObj[k], targetObj[k]);
    } else {
      newObj[k] = targetObj[k];
    }
  }
}
deepCopy(obj, o);
console.log(obj);