以下是非常大的逻辑的一部分,功能跟踪只是为了简化。Track 从数据库加载对象并存储在缓存中。
var cache = [];
function newObject(a){
var b = {};
b.tracker = a;
cache.push(b);
}
var t = {};
track(t);
track(t);
track(t);
track(t);
...
cache.length = 0;
track(t);
track(t);
track(t);
track(t);
....
cache.length = 0;
清除缓存后,是否会因为 b.tracker 持有对 t 的引用而导致内存泄漏?为澄清起见,tracker t 不存储对创建的任何对象的任何引用。
我需要以下方法吗?
for(var i=0;i<cache.length;i++){
cache[i].tracker = null;
}
cache.length = 0;
或者 JavaScript 引擎足够聪明,可以删除 b 的所有实例,因为没有正文引用 b 了?