一、JS 垃圾回收机制
垃圾回收机制是干什么的?
把不需要或者是不用的代码进行回收
例如:
在第6行就应该把a销毁掉
但是系统怎么知道销毁的a没有用呢?
因此需要知道标记清除和引用计数的方法了。
1》标记清除(最常用的一种垃圾回收机制)
其实在11行声明变量的时候,就已经标记了一下,在12行还在用弹出函数
14行函数已经调用完成(不再执行),那么在15行就没有再用到这个函数中的a,因此,它会在内存中,把a销毁掉。
2》引用计数(最不常用一种垃圾回收机制)
案例:创建一个函数,写一个对象,在fn中把obj传过去,那么20行的o对应的就是obj。如果将o赋给一个变量,则引用一次(+1),同理,再赋一个变量(+2).
那么什么时候会清除?
如果在不引用o了(如在23行后不再 + (引用)了)或者是销毁了,那么不引用了(-1),再次不引用了(再-1),一直-1直到为0的时候才能清除。
那么提问:如果一直都是引用,没有不引用的情况,是否就不销毁了呢?
不是,但是会等很长时间才能销毁。因此,这便是引用计数最不常用的原因。
3.手动清除(其实就是把不用的变量|对象|函数===》(赋值为空)= null)
案例:创建函数,运行函数,在函数内写一个对象obj1,再给obj添加一个属性。再创建一个对象obj2,也写一个属性。
#如果对象obj1在项目中不需要用了/不想用对象obj1了,则可以写“对象=null”。