还是收集执行上下文对象垃圾,只剩下词法环境对象仍被引用(即由闭包引用)?
即,当左侧的Execution上下文对象从堆栈中弹出时,它们是否会被垃圾回收,而如果[[Environment]]被闭包引用,则该垃圾仍保留?
也想知道:
是否执行ExecutionContext a)创建全局/窗口/模块类型对象,并b)设置其“ this”属性的值以指向它。 (其中global和window是ExecutionContext的属性)。
还是ExecutionContext ==全局和窗口类型的对象?
答案 0 :(得分:2)
一个变量会一直留在内存中,直到至少有一个标识符链接到它为止。如果您在闭包中有一些变量,它们将保留在内存中,直到该闭包处于活动状态。
function foo() {
const a = 1;
const b = 2;
return function boo() {
return a + b;
}
}
const moo = foo() //moo is now linked to the boo closure
在这个例子中,所有的链接都是这样的:
所以,只要有moo,变量a和b就会被存储在内存中。在这种情况下,我们可以将 moo 设置为 null。在此之后,垃圾收集器将无法从根到达 a 和 b。这意味着将自动删除变量。