【发布时间】:2019-08-01 18:16:35
【问题描述】:
我是 javascript 新手,我发现了一篇关于内存的文章和一个具体示例。article
在例子中说:
重要的是,一旦为闭包创建了一个作用域, 在同一个父范围内,该范围是共享的。在这种情况下, 为闭包 someMethod 创建的作用域由未使用共享
我将它更改为固定版本,但同样的情况发生了。 someMethod 不在同一个父范围内,但内存泄漏仍然存在。我错过了什么?
var theThing = null;
var replaceThing = function () {
var originalThing = theThing;
var unused = function () {
if (originalThing)
console.log("hi");
};
theThing = {
longStr: new Array(1000000).join('*'),
someMethod: function () {
console.log(someMessage);
}
};
};
setInterval(replaceThing, 1000);
固定版本:
var theThing = null;
var replaceThing = function () {
var originalThing = theThing;
var unused = function () {
if (originalThing)
console.log("hi");
};
(function(){
theThing = {
longStr: new Array(1000000).join('*'),
someMethod: function () {
console.log(someMessage);
}
};
})()
};
setInterval(replaceThing, 1000);
【问题讨论】:
-
"someMethod 不在同一个父范围内" - 你的意思是什么?
-
@Bergi Unsed 方法将 replaceThing 作为父范围,而 someMethod 将匿名函数作为父范围