关于堆栈,深拷贝,浅拷贝的理解

栈:

1.自动分配内存空间,存基本数据,占据一定的内存大小

2.先进后出,就像水杯里的水

3.特点:存取速度快,但是不灵活;因为结构简单,所以在变量使用完成后,就可以释放,内存回收容易实现

 

堆:

1.存引用类型的值。但是会在栈中开辟一定的空间,存储相应的堆中的地址

2.先进先出,就像水管

3.特点:使用灵活,可以动态增加或删除空间,但是存取比较慢

 

 

浅拷贝:基本类型数据的复制,引用类型直接复制(拷贝的是内存地址) 

           

深拷贝:将对象从内存中 完整的拷贝一份出来,从堆内存中开辟一个新的区域存放 新对象,两个对象相互独立

           常用方法:JSON.stringfy()

 

 object.assign()   一层是深拷贝   二层后就是浅拷贝

 

 // 一层深拷贝
    var obj = {};
    var source = {
      a:1
    };
    let newobj = Object.assign(obj ,source)
    source.a = 2;
    console.log('source',source); //{a:2}
    console.log('obj',obj); //{a:1}
    console.log('newobj', newobj)
    
    // 二层浅拷贝
    var obj1 = {
      a: {
        b: 1
      }
    }
    var obj2 = {};
    Object.assign(obj2,obj1)
    obj1.a.b = 2;
    console.log('obj1',obj1);  // {b:2}
    console.log('obj2',obj2);  //{b:2}
posted @ 2020-05-13 12:06  cmwang2017  阅读(354)  评论(0编辑  收藏  举报