内存概念:栈, 堆和深浅拷贝及复杂对象的深拷贝的实现
2021/7/19 7:06:49
本文主要是介绍内存概念:栈, 堆和深浅拷贝及复杂对象的深拷贝的实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
内存概念
- 栈:栈中存储简单的数据类型,提供浏览器运行是的内存环境,可以理解为内存条
- 堆:存储复杂数据类型,可以理解为硬盘
JS数据类型
- 简单数据类型: 字符串, 数字, 布尔, undefined, null
- 复杂树类型: 所有的对象都是复杂数据类型(数组, 函数.)
数据创建过程
简单数据创建的过程
- 1.创建一个值(存在栈中)
- 2.声明一个变量,通过上下文关系对
- 3.将创建的变量和值进行关联
复杂数据类型创建过程:
- 1.创建一个对象值,在堆中开辟一块空间存储数据,并对应有一个16进制的地址
- 2.声明一个变量名(存储在栈中)
- 3.将栈中的变量与堆中的数据进行关联
深浅拷贝:
Q:一个简单数据类型之间相互赋值,修改了其中一个变量的值,另一个变量的值是否会变?
A:不会改变,简单数据类型是保存在栈中的,数据的复制是直接单独将一个变量的值复制了一份给了另一个变量,相互之间是没有关联的,修改了其中一个变量的值,另一个不会受到影响.
从这里也可以理解为,简单数据类型的复制默认就是深拷贝,也可以从这里来解释为什么操作字符串的API为什么都不会改变原字符串,字符串的恒定性
let a = 12; let b = a; console.log(a, b);// 12 12 b = 23; console.log(a, b);// 12 23
Q:一个复杂数据类型之间相互赋值,修改了其中一个变量的值,另一个变量的值是否会变?
A:复杂数据类型在栈中保存的是堆中内存对应的一个地址,复杂数据的变量相互复制其实是栈中的地址的复制,其实对应的堆中的数据是同一份的,所以如果复杂数据类型相互复制后,修改了其中的一个变量的值,那另一个变量的值也是会变化的
let c = { name:'小明', age:12 } let d = c; c.name = '小红' console.log(c, d); //{name:'小红',age:12} {name:'小红',age:12}
复杂数据类型默认是浅拷贝的,如果想实现深拷贝就要使用遍历
说明:先更新到这里,后面补全分享内容
这篇关于内存概念:栈, 堆和深浅拷贝及复杂对象的深拷贝的实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01成为百万架构师的第一课:设计模式:Spring中的设计模式
- 2025-01-01一个基于注解驱动的可视化的DDD架构-超越COLA的设计
- 2025-01-01PlantUML 时序图 基本例子
- 2025-01-01plantuml 信号时序图
- 2025-01-01聊聊springboot项目如何优雅进行数据校验
- 2024-12-31自由职业者效率提升指南:3个时间管理技巧搞定多个项目
- 2024-12-31适用于咨询行业的项目管理工具:提升跨团队协作和工作效率的最佳选择
- 2024-12-31高效协作的未来:2024年实时文档工具深度解析
- 2024-12-31商务谈判者的利器!哪 6 款办公软件能提升春节合作成功率?
- 2024-12-31小团队如何选择最实用的项目管理工具?高效协作与任务追踪指南