代码说明一切
核心代码
Q:
我 New 的这个对象会不会被回收?
如果不会被回收,那除了以下方法,有没有其他方法能让该对象被回收:
var a = new A();
a = null;
附上完整可运行代码:
<!DOCTYPE html>
<html>
<head>
<style>
.div {
width: 160px;
box-shadow: 0 1px 2px rgba(0, 0, 0, .6);
}
</style>
</head>
<body>
<div class="div">
<h1>
Click ME!
</h1>
</div>
<script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script>
function A() {
this.addListener = function () {
$('.div').on('click', function () {
alert('Clicked Me!');
});
}
}
(new A()).addListener();
</script>
</body>
</html>
你的写法 a 会从内存中清理, 除非在事件绑定回调方法内调用了a实例
将.div从Dom树中删除, 因为绑定了事件, 所以并不会清除dom的内存
当然, 如果是 jquery-1.3.x以上版本
$(elm).remove() // 该方法会移动事件绑定
因为该方法同时执行了:
jQuery.event.remove(elm);
所以, 如果是用$(elm).remove() 移除dom的, 自然会回收.
但如果有说一个UL, 里边有n个li,都绑定了事件
当 $("ul").html('') // 用该方法清空ul, 并不会回收li
所以, 回收不回收, 看你怎么用了
另外, 全局有DOM的引用, 也不会清, 看你的dom变量生存周期而定, 如: