前端用了Pjax,每次跳转完一个页面(没有刷新),会执行回调,回调里会调用新页面的init()初始化。
function callback() {
//这里用的是jQuery的Remove来删除原先页面的DOM
容器.children().remove();
新页面.init();
}
假设我在A页面的init()里创建一个对象:
function A页面的init() {
//Demo内部会为element绑定各种事件
var demo = new Demo({
element: $(...)
});
//demo对象会在其他操作中使用到,所以不会在init后释放
event.on("其他操作", function() {
demo.abc();
});
}
现在我跳转到B页面,$element已经随着父元素在回调里删除了,那么$element对象还在吗?demo对象还在吗?是否需要手动释放呢?
event.on使得demo对象被'event'使用,demo又使用了element对象。 所以element对象是否被释放, 要看event对象是否已经被释放。 如果event对象也已经释放了, 那么element会在一个合适的时机被垃圾回收。
chrome 的 devTools中的Profiles可以查看内存的变化情况, 可以学着去使用。
chrome debug 或者 console.log打印,如果存在,不需要了,就删
remove完成后,虚拟机会在适当的时候执行垃圾回收的
event这里被定义了吗,还是笔误?
总的来说,如果利用jQuery, remove()会删除element的DOM和里面的bound events。
更详细的关于DOM被删除后会不会有memory leak的讨论: http://stackoverflow.com/questions/12528049/if-a-dom-element-is-remove...