location.reload之后内存泄漏

时间:2013-11-28 10:38:22

标签: javascript html dom memory-leaks

我有一些代码如下。

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的一些最新版本。

1 个答案:

答案 0 :(得分:1)

domNode.someEvent = function(){}是循环引用模式。 domNode得到了someEvent的引用,someWvent是一个属性,在这个someEvent函数中,domNode仍然是可引用的(作为闭包)。

我不确定chrome是否可以回收内存,但我认为应该避免这种模式。

在此处查看更多详情。 http://javascript.info/tutorial/memory-leaks#ie-lt-8-dom-js-memory-leak