堆&栈
堆是堆内存(heap)的简称,栈是栈内存(stack)的简称。
- javascript的基本类型都是直接按值存储在栈中的,每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放。这样带来的好处就是,内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。
- javascript中其他类型的数据被称为引用类型的数据 : 如对象(Object)、数组(Array)、函数(Function) …,它们是通过拷贝和new出来的,这样的数据存储于堆中。其实,说存储于堆中,也不太准确,因为,引用类型的数据的地址指针是存储于栈中的,当我们想要访问引用类型的值的时候,需要先从栈中获得对象的地址指针,然后,再通过地址指针找到堆中的所需要的数据。
栈中的基本数据类型
基本数据类型值指保存在栈内存中的简单数据段。访问方式是按值访问。
-
var name = ‘oralinge’
-
更改name的值
name = 123
从1、2中我们可以看出,改变变量的值只操作变量实际保存的值,并不会开辟新的地址。 -
基本类型变量的复制
var b= name;
从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上。 -
更改变量b的值
b = ‘oralinge’
堆中的引用数据类型
引用数据类型值指保存在堆内存中的对象。也就是,变量中保存的实际上的只是一个指针,这个指针指向内存中的另一个位置,该位置保存着对象。访问方式是按引用访问。
如图示例:
var obj = new Object();
来源:CSDN
作者:Oralinge
链接:https://blog.csdn.net/Oralinge/article/details/103585108