垃圾回收
对于开发者来说,JavaScript 的内存管理是自动的、无形的。我们创建的原始值、对象、函数......这一切都会占用内存。 当我们不再需要某个东西时会发生什么?JavaScript 引擎如何发现它并清理它? JavaScript 中主要的内存管理概念是 可达性 。 简而言之,"可达"值是那些以某种方式可访问或可用的值。它们一定是存储在内存中的。 这里列出固有的可达值的基本集合,这些值明显不能被释放。 比方说: 当前执行的函数,它的局部变量和参数。 当前嵌套调用链上的其他函数、它们的局部变量和参数。 全局变量。 (还有一些内部的) 这些值被称作 根(roots) 。 如果一个值可以通过引用或引用链从根访问任何其他值,则认为该值是可达的。 比方说,如果全局变量中有一个对象,并且该对象有一个属性引用了另一个对象,则 该 对象被认为是可达的。而且它引用的内容也是可达的。下面是详细的例子。 在 JavaScript 引擎中有一个被称作 垃圾回收器 的东西在后台执行。它监控着所有对象的状态,并删除掉那些已经不可达的。 这里是一个最简单的例子: 这里的箭头描述了一个对象引用。全局变量 "user" 引用了对象 {name:"John"}(为简洁起见,我们称它为 John)。John 的 "name" 属性存储一个原始值,所以它被写在对象内部。 如果 user 的值被重写了,这个引用就没了: 现在 John 变成不可达的了。因为没有引用了,就不能访问到它了。垃圾回收器会认为它是垃圾数据并进行回收,然后释放内存。 现在让我们想象下,我们把 user 的引用复制给 admin : 现在如果执行刚刚的那个操作: ......然后对象仍然可以被通过 admin
https://zh.javascript.info/garbage-collection