引用类型


引用类型

原始类型 引用类型(对象、函数)

原始类型的变量,存放的具体的值

引用类型的变量,存放的是内存地址

凡是出现对象字面量的位置,都一定在内存出现一个新的对象

通过以下代码更好了解引用类型

  1. // obj1 指向 对象
         // 创建对象会开辟一个新的内存空间
         var obj1 = {
             name: "123"
             //出现对象字面量的位置 会新开辟一块内存空间,用于存放对象的内容
         };
         //把obj1赋值给obj2 同时是把指向对象的地址也赋值给了obj2  此时obj1和obj2 指向同一个对象 共用了对象的地址
         var obj2 = obj1;
         obj2.name = "456";
         console.log(obj1.name, obj2.name);
         // 输出结果为 456 456
    
  2. var obj1 = {
             name: "123"
         };
         var obj2 = obj1;
         obj2 = {
             name: "456",
             age: 18
         }
         console.log(obj1.name, obj2.name);
         // 输出结果为123 456 原因:新建的对象开辟了新的内存空间 并同时将同名的对象覆盖了 所以两个name地址是不同的
    
  3. var user1 = {
             name: "张三",
             address: {
                 country: "中国",
                 city: "南昌"
             }
         };
         var user2 = {
             name: "李四",
             address: user1.address
         };
         user2.name = "王五";
         user2.address.city = "丰城";
         console.log(user1.name, user2.name);
         // 结果:张三 李四
         console.log(user1.address.city, user2.address.city);
         // 结果:丰城 丰城
         // 原因:每创建一个对象字面量 就会新开辟一块内存空间 user2里面的address引用的是user1中的address,所以两者使用了同一个地址 所以user2.address.city改变值会跟随改变
    

    扩展知识:JS中的垃圾回收
    垃圾回收器,会定期的发现内存中无法访问到的对象,该对象称之为垃圾,垃圾回收器会在合适的时间将其占用的内存释放。


文章作者: overwhat
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 overwhat !
评论
  目录