问答

小白求助-引用数据类型

作者:admin 2021-04-19 我要评论

let user = { name: "John", age: 30, sayHi: function () { //console.log(this); alert(this.name); } }; let admin = user; user = null; admin.sayHi(); adm...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

let user = {

        name: "John",
        age: 30,
        sayHi: function () {
            //console.log(this);
            alert(this.name);
        }
    };
    let admin = user;
    user = null;
    admin.sayHi();
    admin.sex = "nan";
    console.log(user) //null
    console.log(admin) //{age: 30,name: "John",sayHi: ?(),sex: "nan"}这里不应该是null吗
    //admin引用的是user为什么user改变了admin还没变
    console.log("----------")
    //-----------------------------------
    let obj = {
        age : 18,
        name : "asd"
    }
    let user1 = obj;
    let user2 = obj;
    user1.age = 20;
    
    console.log(user1);//20
    console.log(user2);//20
###

引用类型一般指对象函数等数据,这些数据存在堆内存中。

user等变量在栈内存中,他的值是一个对象,而对象存放在堆内存中,所以他存放的值实际上是数据在堆内存中的地址,比如0x0001,这就是为什么叫引用型数据

admin赋值为user,其实赋值的是数据的堆内存地址0x0001,这时候再把user清空,不是删除堆内存中的这个数据,而是将user中存放的地址消除,数据还在堆内存中的,如何清除数据这个是垃圾回收,admin中存放的地址是不会受影响的

###

1.
= {age : 18,name : "asd"}
= null
创建了内存空间;

2.
let admin = user;
只是赋值了空间地址

image

###

是复制了一个指向user对象的指针吗?

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器