let c = {name: '我的对象' } let d = c; console.log(c, d); // {name: "我的对象"} {name: "我的对象"} d.name = "我是改变后的对象"; console.log(c, d); // {name:"我是改变后的对象"}{name:"我是改变后的对象"}复制代码
第一次输出c和b是c对象的原始值,后面我们改变了b对象下的name,第二次输出发现两个都被改变了,那为什么a也会被改变呢?
我来看看浏览器内存内部到底发生了什么!!!
打开浏览器内存,可以看到一堆内容,我们过滤掉其他无用的,只选取string类型下面的数据,发现b所修改的内存信息就显示在第二个,点击详情会看到下面红色框里面的内容。
d in system / Context @130419c in system / Context @130419复制代码
后面的@130419就是内存的地址,我们发现d和c的内存地址只是一样的。
基本类型的赋值
上面是对象类型的引用,当引用对象修改之后被引用对象也会被修改。那我们试试看基本类型会不会被修改!
let a = "我是a"; let b = a; console.log(a, b); // 我是a 我是a b = "我是b,我变了"; console.log(a, b); // 我是a 我是b,我变了复制代码
输出结果是给b赋值了"我是b,我变了"之后,a并没有被修改。那我们看看内存发生了什么变化? 在内存页面我们再新建一个快照,结果如下:
/articles/bmY7Brr