JS中的垃圾回收机制
JS垃圾回收机制:
内存就那么多,用不到的变量,就清除掉,才能保证内存可以被循环利用
常用的两种方法:标记清除、引用计数
标记清除:
function test(){
var a = 10; //被标记"进入环境"
var b = "hello"; //被标记"进入环境"
}
test(); //执行完毕后之后,a和b又被标记"离开环境",被回收
垃圾回收机制先给所有变量加上标记,然后去掉当前“环境中的变量”和“被环境中的变量引用的变量(闭包)”的标记,剩下的就是要删除的变量。
引用计数:
记录一个变量现在被引用次数,为0时就将其清除掉,不为0时就不清除,但常常会导致内存泄露(变量占用内存却没有使用,也没有被清除),举例:
let arr = [1,2,3,4];
console.log("hello world");
[1,2,3,4]占据着一块内存,它被arr引用,因此这块内存的引用次数为1。可是我们并没有使用arr,但这块内存却无法被释放,这就出现了内存泄漏的问题,因此我们需要使用arr=null来将这块内存的引用次数变为0,才可以释放这块内存