JS堆栈

本文详细介绍了JavaScript中的栈内存和堆内存的区别。栈内存主要存储基本数据类型,按值访问,改变变量值不涉及地址变化;而堆内存存储引用数据类型,按引用访问,复制变量实际上是复制指针,指向同一堆内存对象。通过实例展示了如何操作栈和堆内存中的数据,以及它们在内存管理中的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

堆&栈

堆是堆内存(heap)的简称,栈是栈内存(stack)的简称。

  • javascript的基本数据类型都是按值存储在栈内存中,每种类型的数据占用的空间大小都是确定的。
  • javascript的引用数据类型是存储在堆内存中,其实,说存储在堆内存中也不太准确,因为引用数据类型的内存地址是存储在栈内存中,当我们想要访问引用数据类型的值的时候,需要先从栈内存中获得对象的内存地址,然后在通过内存地址找到所需要的数据。

栈中的基本数据类型

基本数据类型的值保存在栈内存中。访问方式是按值访问

var name = ‘oralinge’
在这里插入图片描述
更改name的值
name = 123
在这里插入图片描述
从1、2中我们可以看出,改变变量的值只操作变量实际保存的值,并不会开辟新的地址。

基本类型变量的复制
var b= name;
在这里插入图片描述
从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上。

更改变量b的值
b = ‘oralinge’
在这里插入图片描述
堆中的引用数据类型

引用数据类型值指保存在堆内存中的对象。也就是,变量中保存的实际上的只是一个指针,这个指针指向内存中的另一个位置,该位置保存着对象。访问方式是按引用访问。

指针与地址
如下示例:
var obj = new Object();
在这里插入图片描述
存于栈中的指针指向堆内存的引用数据类型

键值对
obj.name = ‘oralinge’
在这里插入图片描述
引用数据类型的复制
var b = obj
在这里插入图片描述
引用类型变量的复制,其实复制的是存储在栈中的指针,将指针复制到栈中新变量分配的空间中。这个指针副本和原指针指向存储在堆中的同一个地址。复制操作结束后,两个变量实际上将引用同一个对象。因此,无路不能你在操作哪个变量,使得地址中的值发生改变,另一个变量也会受到影响。

命运共同
b.name = ‘我是name’
在这里插入图片描述

var obj = new Object()
obj.name = 'oralinge'
console.log(obj,1)//  {name: "oralinge"} 1
var b = obj
console.log(b,2)// {name: "oralinge"} 2
b.name = '我是name'
console.log(b,3)// {name: "我是name"} 3
console.log(obj,4)// {name: "我是name"} 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值