Javascript 深拷贝的前因后果(深层理解)

本文探讨JavaScript中深拷贝的原因和实现,解释值类型和引用类型的区别,阐述浅拷贝的问题,并通过实例讲解如何手写深拷贝函数,确保在修改副本对象时不影响原始对象。
摘要由CSDN通过智能技术生成


前言

关于 JS 的深拷贝,相信不少同学都有所耳闻或者了解吧,那为什么会有深拷贝?深拷贝解决了什么问题?深拷贝的实现逻辑是什么?作为前端面试的高频考点,今天这篇文章就带大家吃透深拷贝,搞懂它的前因后果


前因—浅拷贝

在讲浅拷贝之前,先来了解一下什么是值类型和引用类型,会的同学就当复习一波~

值类型和引用类型

什么是值类型和引用类型?一个例子教大家看懂:
值类型:
在这里插入图片描述
这个大家应该都能理解,比较直观的逻辑,打印的b结果为100。看下面逻辑图加深印象
在这里插入图片描述

值类型都是通过栈进行存储的:

  • 第一步:把a赋值成100
  • 第二步:把b赋值为a,也是等于100
  • 第三步,把a赋值为100,a和b互不影响,b的值仍未100

引用类型:
在这里插入图片描述

a赋值成一个对象age:20,b赋值为a,b.age赋值为21,最后打印a.age的值也为21。看下面逻辑图加深印象:

在这里插入图片描述
这里除了上面的栈,还引入了一个新的概念堆。在计算机的存储中,栈从上往下排列,堆从下往上排列,一般不会重合。来看一下上面例子的存储过程:

  • 第一步:给age赋值成一个等于20的对象,他的key会给一个内存地址一,此时变量a指向的是一个内存地址1,也就是说a里面存储的并不是这个对象,而是存入了内存地址指向这个对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beiyux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值