1、栈和堆
栈(stack):是栈内存的简称,栈是自动分配相对固定大小的内存空间,并由系统自动释放,栈数据结构遵循FLIO(first in last out)先进后出的原则。比如乒乓球盒的结构与其类似,先放进去的乒乓球只能最后取出。
堆(heap):是堆内存的简称。堆是动态分配内存,内存大小不固定,也不会自动释放,堆数据结构是一种无序的树状结构,同时它还满足key-value键值对的存储方式。
2、基本类型和引用类型
基本数据类型:undefined
、null
、string
、Boolean
、Number
、Symbol
(ES6 新增),这些都是直接按值存放在栈内存中,占用内存空间的大小是确定的,并由系统自动分配和自动释放。
引用数据类型:Object
、Array
、Function
,由于它们的值大小不固定,引用数据的值是保存在堆内存中的对象,如下图所示。当我们访问堆内存中的引用数据类型时,实际上则是从栈中获取了该对象的引用地址(或者地址指针)。
堆内存和栈内存是有区别的:栈内存效率比堆内存高,空间相对于堆内存来说小,反之则相反。