前端中关于堆和栈的那些事
前端中关于堆和栈的那些事
写在前面:关于堆和栈,概念知道,但是该怎么应用呢,我自己本身是第三遍才更加深刻的明白,第一遍是知道什么是堆和栈,第二遍是在应用时懵逼了,第三遍是刷视频和自己练习时有了醍醐灌顶的感觉。
-
栈 内存:里面的数据不能长期存在,一般存在运行的函数或者局部变量(基本类型)
-
堆 内存: 数据可以长期存放,一般存放对象。(引用类型)
数据类型
- 基本数据类型:(还是要声明一点,占用内存空间固定,保存在栈中,保存与复制的是值本身)
- string:字符串,用于文本
- boolean:布尔类型
- number:用于表示数值
- null :缺少的标识,指示变量未指向任何对象
- underfined:任何一个只声明未复制的变量
- 引用类型:对象,数组,Data,...除了基本数据类型外
堆和栈的应用
- 堆:只要时引用类型的数据,复制和赋值的都是一个地址,数据指向的都是一个地址,地址里面的数据变化之后,指向这个地址的数据都会变化
//判断arr1 和 arr2是否一致 let arr1 = [1,2,3,4] let arr2 = arr1 arr2[2]=8 cinsole.log(arr1,arr2) // arr1,arr2都为[1,2,8,4]
-
栈:基本类型的数据都是存在栈中,保存和复制的都是自己本身
let a = 1 let b = a b =2 console.log(a,b) a为1,b为2
练习时出错的点
let arr1 = [1,2,3,4] let arr2 = arr1 arr2[2]=[1,3,3,4] cinsole.log(arr1,arr2) arr1 = [1,2,3,4]; arr2[2]=[1,3,3,4]
问题:按理说引用数据类型指针指向的是一个地址,会什么有两个不一样的答案呢
分析发现:arr1指向的地址和arr2是不同的,所以是不同的数据,arr2 自己又重新引用了一个地址,一个数组,一个对象就是一个堆,arr2=[]就是重新得到了一个新的内存地址
- 基本数据类型:(还是要声明一点,占用内存空间固定,保存在栈中,保存与复制的是值本身)
本文作者:张尊娟
本文链接:https://www.cnblogs.com/wszzj/p/14103423.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2019-12-08 函数的使用场景
2019-12-08 函数的参数
2019-12-08 构造函数的形式创建函数
2019-12-08 使用字面量的形式创建函数
2019-12-08 global对象,数据存储方式和检测,包装器对象等