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

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

“ Google Dev工具配置文件快照保留器”窗口显示以下连接(表明某些内容引用了该对象)。

javascript - JavaScript内存泄漏。由于函数变量,未删除对象-LMLPHP

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

javascript - JavaScript内存泄漏。由于函数变量,未删除对象-LMLPHP

javascript - JavaScript内存泄漏。由于函数变量,未删除对象-LMLPHP

问题是BookView具有addSheet函数变量,该变量尚未在任何地方使用,但通过_this拥有对自身的引用。

我试过的

1)this.bookView.addSheet = null;(无济于事)

2)delete this.bookView.addSheet;(无济于事)

我的问题:

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

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

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

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

附言bookView对象在Durandal页面内创建。 this.bookView基本上是一个page1.bookView。该页面已正确删除。在deactivate(页面删除)功能期间,我调用this.bookView = null;

最佳答案

如果您不是从BookView实例化function,则this将是您的window对象,该对象是全局的。您已将其全局附加到一个将一直存在的对象,直到您关闭浏览器或选项卡。您可以尝试通过尝试BookView摆脱delete window['bookView']

编辑:在您的Durandal页面中停用回调,通过您的this并删除其键。

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

09-25 19:30