看这个例子,当我们设置outerFunction = null
;时,我很难理解到底发生了什么。我的第一个想法就是function outerFunction(){ //nothing }
。但是,当调用referenceToInnerFunction
时,我们仍然可以获得猴子值。我敢肯定这与范围有关,但我无法将其包裹住。另外,如何解决此问题,以便在我呼叫referenceToInnerFunction
时也得到null
,与monkey?
相对
function outerFunction() {
var outerVar = "monkey";
function innerFunction() {
return outerVar;
}
return innerFunction;
}
var referenceToInnerFunction = outerFunction();
alert(referenceToInnerFunction());
outerFunction = null;
alert(referenceToInnerFunction());
最佳答案
javascript的现代实现的垃圾收集器算法认为,某些东西在无法到达时可以被垃圾收集。在这里referenceToInnerFunction
可以访问outerVar
,因为
var referenceToInnerFunction = outerFunction();
因此,只要您保留某些可以访问
outerVar
的权限,就不可能将其释放。更多内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
关于javascript - 分析闭包示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38170123/