垃圾回收:
JavaScript代码运行时,需要分配内存空间来储存变量和值。当变量不在参与运行时就需要系统收回
被占用的内存空间,这就是垃圾回收。
回收机制:
Javascript 具有自动垃圾回收机制,会定期对那些不再使用的变量、对象所占用的内存进行释放,
原理就是找到不再使用的变量,然后释放掉其占用的内存。
JavaScript中存在两种变量:局部变量和全局变量。全局变量的生命周期会持续要页面卸载;而局部
变量声明在函数中,它的生命周期从函数执行开始,直到函数执行结束,在这个过程中,局部变量会
在堆或栈中存储它们的值,当函数执行结束后,这些局部变量不再被使用,它们所占有的空间就会被释放。
不过,当局部变量被外部函数使用时,其中一种情况就是闭包,在函数执行结束后,函数外部的变量
依然指向函数内部的局部变量,此时局部变量依然在被使用,所以不会回收。
标记回收
标记清除是浏览器常见的垃圾回收方式,当变量进入执行环境时,就标记这个变量“进入环境”,
被标记为“进入环境”的变量是不能被回收的,因为他们正在被使用。当变量离开环境时,
就会被标记为“离开环境”,被标记为“离开环境”的变量会被内存释放。
引用计数
垃圾回收机制就是引用计数,这个用的相对较少。引用计数就是跟踪记录每个值被引用的次数。当声明了
一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量
又取得了另外一个值,则这个值的引用次数就减1。当这个引用次数变为0时,说明这个变量已经没有价值,因此,
在在机回收期下次再运行时,这个变量所占有的内存空间就会被释放出来。