JavaScript中堆栈和浅拷贝/深拷贝

情景:我们在复制一个对象之后,对新的对象重新赋值时常会影响到原来的对象,这不是我们想要的结果,此片文章来解释并解决这个原因。


传送门:
https://www.cnblogs.com/chengguanhui/p/4737413.html
http://blog.csdn.net/flyingpig2016/article/details/52895620
http://blog.csdn.net/hairetz/article/details/4141043/

建议先看第一二篇文章,如果对堆栈感兴趣的 可以深入的看一下第三篇文章。

稍微写下自己的理解

出现这种事情的情况的原因是因为JS基本数据类型,和对象类型存粗的位置的导致的。
基本类型存于栈中,而对象存于堆中。
这就到了讲一个变量复制到另一个变量中后产生的不同效果。

我们知道对象是其实是保存一个地址,真正对象内的数据保存在另一地方,普通的赋值,仅仅是将这个地址给了新的变量,这是两个变量,但是一个地址,一个对象。那么为了解决这个问题,我们可以先声明一个空对象,然后在将源对象的值赋值到新对象中,这就是两个变量,两个地址,两个对象,不回互相影响。
但是,如果对象值是一个对象那么就会产生和之前一样的问题,这时候只要重复上面的方法就可以,用递归的方式处理。

详情可以参看上面文章中的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值