在 JavaScript 中,我有复杂的对象,包括函数、变量和闭包。
这些对象非常大,非常复杂,并且一遍又一遍地创建和销毁。我将在一个非常低功耗、非常低内存的设备上工作,所以对我来说重要的是,当对象被删除时它们真的消失了。
这是一个代码示例:
window["obj"] = {};
obj.fun1 = function(){
console.log(1);
};
(function(){
var n = 2;
function fun(){
console.log(n);
}
obj.fun2 = fun;
})();
(function(){
var w = "Three";
function fun(){
console.log(w);
}
obj.fun3 = fun;
})();
(function(){
var w = "f.o.u.r.";
function fun(){
setInterval(function(){
console.log(w);
}, 1e3); // e.g. a timeout
}
obj.fun4 = fun;
})();
obj.fun1();
obj.fun2();
obj.fun3();
obj.fun4();
var fun2 = obj.fun2;
// window.obj = null;
// window.obj = undefined;
delete window.obj;
console.log(typeof obj); // undefined
第二个问题是“挥之不去的引用”的问题,例如:
fun2(); // 2
// Interval: "f.o.u.r.", "f.o.u.r.", "f.o.u.r.", "f.o.u.r." ...
有什么可以做的(除了在删除对象之前手动清理)?
上面代码的 JSFiddle 在这里:http: //jsfiddle.net/8nE2f/