1.栈与堆
可以粗浅的认为JavaScript的所有数据都保存在堆内存中。
但仍然需要基于堆栈数据结构的思路进行处理,比如JavaScript的执行上下文(会创建一个叫做变量对象的特殊对象)在逻辑上实现了堆栈。
栈(堆栈)空间: 最后被放进去,但可以最先被使用。即先进后出,后进先出。
堆空间: 无序的数据存储方式,只要知道名字就可以找到数据。
2.变量对象与基础数据类型
基础数据类型往往都会保存在变量对象中。
变量对象特殊,虽然也存放在堆内存中,理解时需要将其于堆内存区分开来。
基础数据类型可以直接访问和操作保存在变量中实际的值。
5种基础数据类型: Undefined、Null、Boolean、Number、String。
3.引用数据类型与堆内存
引用数据类型的值是保存在堆内存中的对象。
不能直接访问和操作对象的堆内存空间。
操作对象实际上是在操作对象的引用。
引用可以理解为保存在变量对象中的一个与堆内存的实际值相关联的地址。
4.内存空间管理
自动垃圾收集机制使内存被自动管理。
自动垃圾收集机制的原理就是找出那些不再继续使用的值,然后释放其占用的内存。垃圾收集器会每隔固定的时间段就执行一次释放操作。
内存生命周期: 1. 分配所需内存;2. 使用所分配内存(读、写);3. 不需要时将其释放、归还。
垃圾收集器很容易判断并回收局部变量。但是全局变量需要自动释放内存空间的时间则很难判断,因此为确保性能问题需要尽量避免使用全局变量。