JavaScript进阶-对象存储问题易错点

 今天在学习过程中发现了一个比较容易出错的知识:

 

代码如下:

var a ={age:12};
function fun(obj){
obj.age=14;
}
fun(a);
console.log(a.age);

 第一段代码的运行结果是输出:14;而第二段代码运行的结果是输出:12。

var a ={age:12};
function fun(obj){
obj = {age:14};
}
fun(a);
console.log(a.age);

解释如下:

两段代码中我们都创建了一个a数组,由于数组是对象,所以会将数组内容保存在堆内存中,而栈内存保存的是a数组的一个地址值。

在第一段代码中,当我们使用函数fun时,将a作为实参传递给形参obj,此时执行obj.age=14就是根据a的地址值找到堆内存中的内容并修改age为14,此时a数组被修改,输出结果为14.

而在第二段代码中,我们使用函数fun时,也是将a作为实参传递进形参obj,但是执行的语句是obj = {age:14},此时相当于给obj对象重新创建一个数组,在堆内存中obj保存的值是堆内存中新对象的地址值。我们可以为切断了obj跟a的联系,此时a.age并没有被修改,仍然是12.

以下为第二段代码运行时的过程解析:

如果有错误的地方,评论区指正谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值