JavaScript内存泄漏。由于函数变量

时间:2017-01-31 22:46:06

标签: javascript typescript google-chrome-devtools

我创建了一个对象this.bookView = new BookView();

当我执行this.bookView=null时,垃圾收集器不会删除对象。

Google Dev Tool Profile Snapshot Retainers窗口显示以下连接(显示某些内容引用了该对象)。

enter image description here

"Preview is not available"以外,所有行均为context in ()

enter image description here

enter image description here

问题是BookViewaddSheet函数变量尚未在任何地方使用(尚未),但通过_this保留了自身的参考。

我尝试了什么:

1)this.bookView.addSheet = null;(没有帮助)

2)delete this.bookView.addSheet;(没有帮助)

我的问题:

1)如何从Window中删除此连接并使bookView被垃圾回收?

2)为什么addSheet变量是从Window对象链接的?

3)transitions窗口上的descriptorsretainers是什么?

4)我可以使用哪些其他工具来查找有关此类内存泄漏的更多详细信息。

P.S。在Durandal页面内创建bookView对象。 this.bookView基本上是page1.bookView。页面已正确删除。在deactivate(页面删除)功能期间,我致电this.bookView = null;

1 个答案:

答案 0 :(得分:2)

如果您未在BookView内实例化function,则this将是您的window对象,这是全局的。您已将其全局附加到将关闭浏览器或选项卡之前将存在的一个对象。您可以尝试BookView

来摆脱delete window['bookView']

编辑:在您的Durandal页面停用回调,浏览this并删除其密钥。

for(var key in this)
   delete this[key];