##垃圾收集## **3. 垃圾收集** JavaScript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。 垃圾收集机制的原理:找出那些不再继续使用的变量,然后释放其占用的内存。 垃圾收集器是按固定的时间间隔,周期性地执行回收操作。 垃圾收集器如何判断哪些变量不需要使用了呢?常见的有两种方式 **(1)标记清除** 当变量进入环境(比如在函数中声明一个变量)时,就将这个变量标记为“进入环境”。 标记变量的方式可以是任意的。 垃圾收集器在运行时会给存储在内存中的所有变量都加上标记。然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记,而在此之后再被标记的变量将被视为待删除的变量,原因是环境中的变量以及无法访问到这些变量了,最后完成内存清除工作,销毁那些带标记的值并回收它们占用的内存空间。 **(2) 引用计数** 引用计数是不太常见的垃圾收集策略。引用计数可以说是跟踪记录每个值被引用的次数。比如:当声明了一个变量并将一个引用类型值赋给变量时,则这个值的引用次数是1,当同一个值又被赋给另一个变量,则该值的引用次数加1,相反,当包含对这个值引用的变量取得了另外一个值(也就是不指向前面的值)时,这个值的引用次数减1,当这个值的引用次数为0时,就会被销毁并释放内存空间了。 解除引用:一旦数据不再有用,最好通过将其值设置为null来释放其引用。