我有一些代码如下。
var domNode = somehowGet();
domNode.someEvent = function(){
domNode.appendChild(createNodeUsing(window));
};
window.guid = createGuid(); // called at startup
在我调用location.reload之后,我打开DevTools探查器并看到一些分离的树节点和其他Window实例,它们的数量与重新加载的数量完全相同。 即如果我调用location.reload 5次,则会有5个额外的Window对象实例,并且所有实例都有不同的Guids。
问题是 - 如果除了那些之外没有其他对domNode的引用,GC是否会释放内存,我在上面展示了吗?
其他的话我需要知道为什么有几个Window实例
浏览器是Chromium的一些最新版本。
答案 0 :(得分:1)
domNode.someEvent = function(){}是循环引用模式。 domNode得到了someEvent的引用,someWvent是一个属性,在这个someEvent函数中,domNode仍然是可引用的(作为闭包)。
我不确定chrome是否可以回收内存,但我认为应该避免这种模式。
在此处查看更多详情。 http://javascript.info/tutorial/memory-leaks#ie-lt-8-dom-js-memory-leak