今天来分享一下这周做到的一个有关垃圾回收机制的练习题
这个题的思路很简单,只需要注意一点,在A函数执行的时候,他里面还有一个函数,这个过程实际上就是完成了一次函数的重构,让他指向了新的地址,但是在当前执行的那个环境下,里面的重构函数是不执行的,明确了这一点后,我们就可以开始分析这个题了。
首先,在全局执行上下文中,有a,b
然后一个函数堆,存放A函数的函数题,并且有一个地址,然后全局执行上下文中多了一个A,地址指向该地址
然后A(1)开始执行,首先确定作用域链,然后形参赋值,变量提示,然后代码开始执行遇到里面的函数,首先是不执行的,而是会重新开辟一个堆内存,然后有一个新地址,A重新指向这个新地址,然后指向alert(a++),因为此时形参a = 1,所以输出就是 1;但是此时私有执行上下文中的a++后变为2,
在执行完A(1),最初的存放A函数的堆内存由于没有变量被外占用,是会被释放的,但是后面A函数中的新创建的内存地址,由于A变量被占用,是不会被释放的
然后A(2)开始执行,会执行alert(a+b++); a的值是2,私有上下文未被释放的,b是形参2,所以结果是4.
引入一张图,解释整个过程