JavaScript 垃圾回收
创建的原始值、对象、函数等一切都会占用内存,当我们不再需要某变量或数据时,JavaScript 引擎会自动地进行清除,该操作称为垃圾回收。
Tip
参考:垃圾回收
可达性
可达性 Reachability 是指数据以某种方式可访问或可用,它们一定是存储在内存中的。这是 JavaScript 内存管理的主要概念。
当一个数据是可达的它就不会被垃圾回收器(一个在JavaScript 引擎后台执行的程序,它监控着所有对象的状态)删除。
可达值的基本集合(这些值明显不能被释放):
- 前函数的局部变量和参数。
- 嵌套调用时,当前调用链上所有函数的变量与参数。
- 全局变量。
- 还有一些内部的
Tip
这些值被称作 根 roots
此外,如果是通过引用或引用链从根访问任何其他值,则认为该值是可达的。如局部变量中(引用)有一个对象,并且该对象有一个属性引用了另一个对象,则该对象被认为是可达的,而且它引用的内容(嵌套)也是可达的。
js
// user 具有对这个对象的引用
let user = {
name: "John"
};
箭头描述了一个对象引用。全局变量 user
引用了对象 {name:"John"}
,则此时对象是可达的。
如果 user
的值被重写了,这个引用就没了,即对象变成不可达的了,垃圾回收器会认为它是垃圾数据并进行回收,然后释放内存。