比如下面两种情况
循环里 通过var 定义变量
for(var i = 0; i < 100; i ++) {
var obj = new Object();
}
上面的obj对象会在什么时候被回收?是在下一次for循环开始,还是整个for结束呢?
循环里 通过let 定义变量
for(var i = 0; i < 100; i ++) {
let obj = new Object();
}
如果通过let来定义obj,形成了块级作用域,情况会有所不同吗?
因为通过var定义,不存在块级作用域,obj应该都是一个变量,只是每次obj都被覆盖成了新的对象。这两种定义方式对于对象的回收有影响吗?
这两种写法对于垃圾回收都是没有区别的
没有形成闭包的时候,当“离开环境”或者没有引用时,下次gc过程发生时就可能被回收