我正在学习一门课程,涉及到作用域/闭包并简要提到垃圾回收。在课程中有一个问题被提出:
作用域存在多长时间?答案是——直到不再有任何引用它的变量。没错,我们基本上说了,闭包就像是对一个隐藏作用域对象的引用。只要还有某些函数仍然具有对该作用域的闭包引用,该作用域就会一直存在。但是,一旦闭包消失,作用域可能被垃圾回收。
var sum = function sumHndlr(x, y) {
if (y !== undefined) {
return x + y;
} else {
return function(y) {
return x + y;
}
}
}
在我看来,闭包的引用是当我们将函数分配给sum
变量时,但这是否意味着它会永久存在,或者我没有理解js在编译器解析等方面的执行方式?
sum
/sumHndlr
不是闭包。你必须调用它(不带y
)才能得到一个。然后,只要你将其保留在某个地方,它就会一直存在(以及它所关闭的x
)。如果您想让我们提供更多信息,请向我们展示该调用。 - Bergisum
赋值为null
或其他什么东西,那么它就会发生。但现在我只是猜测。 - Antonio Pavicevac-Ortizvar add2 = sum(2);
,那么将add2 = null
赋值将使该函数有资格进行垃圾回收。 - Bergi