请用javascript这种情况是否需要手动释放对象
前端用了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对象还在吗?是否需要手动释放呢?
啪啪啪·啪啪啪
9 years, 9 months ago
Answers
event这里被定义了吗,还是笔误?
event.on("其他操作", function() {
demo.abc();
});
总的来说,如果利用jQuery, remove()会删除element的DOM和里面的bound events。
the .remove() method takes elements out of the DOM. Use .remove() when you want to remove the element itself, as well as everything inside it. In addition to the elements themselves, all bound events and jQuery data associated with the elements are removed. To remove the elements without removing data and events, use .detach() instead.
更详细的关于DOM被删除后会不会有memory leak的讨论: http://stackoverflow.com/questions/12528049/if-a-dom-element-is-remove...
dousky
answered 9 years, 9 months ago