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);
Frage 1: Die Funktion deklariert den Kontext, wenn sie erstellt wird, und aktualisiert die lokalen Variablen in der Bereichskette, wenn sie ausgeführt wird. Die Bereichskette enthält lokale Variablen innerhalb der Funktion, wenn sie ausgeführt wird . Woher wissen Sie, dass die nicht verwendete Funktion definitiv auf originalThing verweist?
Frage 2: Wie lässt sich dieses Speicherleck erklären? Ich hoffe, die Experten können es genauer erklären?
问题1: function(replaceThing)内的变量在离开了它的作用域后,如果这个function(replaceThing)在使用一次后,直到程序执行完也没有再引用,过一段时间就会被回收。
问题2: 你看看thething赋值动作,其中的创建数组动作可是一直在做,一次1000000做join操作,不断执行,内存回收的速度跟不上它增长的速度,很快导致内存泄露。