5.11 垃圾回收
不再使用的对象的内存将会自动回收,这种功能称作垃圾回收。所谓不再使用的对象,指的是没有被任何一个属性(变量)引用的对象。
由 JavaScript 有着客户端程序大多运行时间很短这一历史原因,因此与其他程序设计语言相比,开发者并不太关心对象的存在生命周期。如果整个程序的生命周期就很短,相对来说就没有必要对每个对象的生命周期太过在意。
不过随着最近各种 Web 应用以及服务器端 JavaScript 程序的发展,情况发生了变化。现在已经有必要像其他的程序设计语言那样,考虑对象的生命周期问题了。垃圾回收的目的是,使开发者不必为对象的生命周期管理花费太多精力。因此通常只考虑代码即可,具体的 JavaScript 实现会帮忙解决那些麻烦的问题。虽说通过 delete 来删除不再使用的属性是一个不错的习惯,但只要不会造成内存泄漏,就没有必要在这方面花太多的心思。
不过,即使有垃圾回收功能,仍然有可能发生内存泄漏。有些是由于垃圾回收机制的实现存在问题,更多的是因为发生了循环引用的情况而造成了内存泄漏。
所谓循环引用,指的是对象通过属性相互引用而导致它们不会被判定为不再使用的状态。对于客户端 JavaScript 来说,存在几种常见的可能导致循环引用的情况,因此建议使用内存泄漏检测工具来检测。