Skip to content

1、栈和堆

栈(stack):是栈内存的简称,栈是自动分配相对固定大小的内存空间,并由系统自动释放,栈数据结构遵循FLIO(first in last out)先进后出的原则。比如乒乓球盒的结构与其类似,先放进去的乒乓球只能最后取出。

堆(heap):是堆内存的简称。堆是动态分配内存,内存大小不固定,也不会自动释放,堆数据结构是一种无序的树状结构,同时它还满足key-value键值对的存储方式。

2、基本类型和引用类型

基本数据类型:undefinednullstringBooleanNumberSymbol(ES6 新增),这些都是直接按值存放在栈内存中,占用内存空间的大小是确定的,并由系统自动分配自动释放

引用数据类型:ObjectArrayFunction,由于它们的值大小不固定,引用数据的值是保存在堆内存中的对象,如下图所示。当我们访问堆内存中的引用数据类型时,实际上则是从栈中获取了该对象的引用地址(或者地址指针)

堆内存和栈内存是有区别的:栈内存效率比堆内存高,空间相对于堆内存来说小,反之则相反