假设当前环境是在某个局部作用域里。
比如有这么一个Function
对象:
var ABC = function() {
this.show = function() {
alert('呵呵哒');
};
$('#test').click(this.show);
};
new ABC();
我一直认为理论上:一个对象失去所有指针之后就会自动销毁。
所以我自然而然的认为这段代码运行完,再出了这个作用域之后,这个new ABC()
对象就会自动销毁。
但是,
好像并没有。
如果真有一个id
为test
的element
,点击之后,还是会弹出呵呵哒
所以,求解。
new出来的instance并没有被销毁,就算是出了该作用域,因为dom事件和闭包一样,里面用到的对象和数据是不会被销毁,除非事件取消和闭包被销毁,才会清除。。所以大量用到的时候,要注意内存泄露的问题
new ABC(),运行了jQuery的绑定代码,你的this.show已经把值传到click()的形参里了,当然会弹呵呵哒。。。不然es5的for循环里异步函数为嘛搞成闭包的形式。。。
你的现象得不出你的结论。$('#test')
的click
事件绑定的方法是ABC.show
,和new ABC()
是否销毁没有任何关系。
何况凡是你用到的对象都不会被销毁。常规方法是无法通过测试用例来得出是否已被销毁的结论的。