一、栈内存:专门用于保存全局变量/局部变量和基本数据类型的内存空间
栈 | 栈 |
---|---|
变量名 | 基本数据类型的值 |
变量名 | 对象的地址值 |
二、堆内存:专门用于保存对象的内存空间
var a = {name = 'ellen'};
var b = {name = 'ellen'};
// 这是两个不同的对象,在堆内存里分别代表两个区域,对应两个不同的地址值
特点:只要是对象相关的信息,如对象的属性、方法,都保存在堆内存中,它不以全局变量或局部变量的形式存储在栈内存,所以我们访问或调用时需要用到(obj.属性名/方法)的语法。
三、对比
1.栈内存中保存的是基本数据类型值本身,当要保存的内容是一个对象时,栈只能保存对象的地址值,而不保存对象本身。
2.堆内存中只保存对象,每个小的内存块对应一个地址值,用于找到对象所在的位置
3.如果将对象保存在一个变量中,那么变量这个标识本身是保存在栈内存中的,此时它的值是一个地址值,这个地址是堆内存里对象实体所在的具体位置。