js变量的垃圾回收是如何执行的

为什么通过 o2 对象调用 o1 方法。变量 a 不会被回收。

而直接通过 o1 自调用会被回收。他们两者函数执行的过程难道不一样吗。

o1 自调用是我模仿 o2 的执行过程写出来的。

img

img

o1 方法是闭包

要了解闭包的特性,就要先了解函数与局部作用域。

一个函数在执行时会先创建一个局部作用域,之后在这个函数内声明的变量与子函数都会放到这个局部作用域中。
闭包是指子函数会与其所在的局部作用域绑定在一起。只要这个子函数存在,子函数所在的局部作用域和局部作用域中的局部变量就一直存在,不会被系统回收。可以让子函数内始终能访问局部作用域中的局部变量。