JavaScript 关于引用变量的赋值问题

引用变量赋值问题

  • 2个引用变量指向同一个对象,当通过其中一个引用变量修改其指向对象的内部存储内容时,另一个引用变量也会看到。
  • 2个引用变量指向同一个对象,当其中一个引用变量指向一个新的对象时,另一个引用变量还是指向原来的对象。

示例

说明问题:2个引用变量指向同一个对象,当通过其中一个引用变量修改其指向对象的内部存储内容时,另一个引用变量也会看到。

  var obj1 = {name:'vivi'};
  var obj2 = obj1;
  obj1.name = 'Tom';
  obj2.age = 15;
  console.log(obj2.name); //Tom
  console.log(obj1.age) ;// 15
  function f1(obj) {
    obj.age = 12;
  }
  f1(obj2);
  console.log(obj1.age);

在这里插入图片描述

画图理解

在这里插入图片描述

两个引用变量指向的对象属于同一空间的,所以无论是通过obj1还是obj2修改其内部数据,两者都可以看到修改过后的内容。

示例

说明问题:2个引用变量指向同一个对象,当其中一个引用变量指向一个新的对象时,另一个引用变量还是指向原来的对象。

  var obj3 = {name: 'Tom'}
  var obj4 = obj3
  obj3 = {name: 'JACK',age:19};
  console.log(obj4.name);
  console.log(obj3.age,obj3.name);
  function f2(obj) {
    obj = {name: 'Bob'}}
  f2(obj4)
  console.log(obj4.name)

运行结果
在这里插入图片描述

画图理解

在这里插入图片描述

  • var obj3 = {name: 'Tom'}:首先将对象{name:‘Tom’}的地址值赋值给obj3;

  • var obj4 = obj3 ;:再将obj3保存的数据内容赋值给obj4,此时obj4和obj3指向同一个对象,即,对象{name:‘Tom’};

  • obj3 = {name: 'JACK',age:19};:将对象{name:'JACK‘,age:19}的地址值赋值给obj3;

  • console.log(obj4.name);:控制台输出obj4.name,即,‘Tom’;

  • console.log(obj3.age,obj3.name);:控制台输出obj3.age,obj3.name,即,19 ‘JACK’

  • function f2(obj) { obj = {name: 'Bob'}; }:f2的函数声明,函数体包含一条语句: obj = {name: ‘Bob’};

  • f2(obj4):调用函数f2,将实参obj4传递给形参obj,也就是说,此时obj4和obj指向的是同一个对象;
    但在函数体内,又将新对象{name:‘Bob’}的地址值赋值给了obj,此时obj不再指向obj4指向的对象,而是一个新的对象,obj随着函数体执行结束而被释放 1 ,obj所指向的对象在后面某个时刻被垃圾回收器回收;

  • console.log(obj4.name);:控制台输出obj4.name,即,‘Tom’;


  1. 释放内存
    在这里插入图片描述 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值