为什么第一段代码可能会出现内存泄露。

robinclark 发布于 2015/03/11 16:39
阅读 1K+
收藏 0

我知道是Closure造成的问题。但是具体是怎么出现的谁来解释下。。。

加载中
0
Jeky
Jeky

对于第一种,由于闭包会引用button,造成循环引用。对于IE8以下浏览器就会造成泄漏。

雪梨苹果
雪梨苹果
能解释下循环引用吗?我看到在一个闭包内定义一次,看不出哪里循环引用。
robinclark
robinclark
有道理呢。能具体解释下吗???
sxgkwei
sxgkwei
没懂你说什么。。。
2
飞炀
飞炀

应该是第一个方式里面,首先有一个DOM元素对象button,然后人为定义button的属性onclick是一个闭包函数,在JS里面,闭包函数是可以访问外层函数的变量,也就是onclick的闭包函数里面引用到了button元素,即使你没有使用这个东西,这就循环引用了。

逻辑上来说就是:如果要释放button对象,需要先删除onclick函数,可是删除onclick函数就需要先释放对button对象的引用,然后要释放button的引用又需要先删除onclick函数,就这样死循环下去,内存泄漏了

robinclark
robinclark
挺有道理的。。。
0
YueZheng
YueZheng
没看出来有区别。自己找个IE测试下。
0
T
T0NYLEE
主要就是hello函数定义方式上面的区别,两种函数定义方式还是有一点点区别的
0
gloomyzerg
gloomyzerg
这个哪里看出会泄漏了?  这哪里存在闭包了?
0
JR1970
JR1970
有谁知道,咱也瞧瞧。
0
xdev
xdev
第一种是存在内存泄漏的风险,但就例子中的代码是没有泄漏的。
0
zabcd117
zabcd117

ie中闭包函数是会引起内存泄露的。

function(){
    var a = document.getElementById('div_name');
    a.onclick = function(){}//匿名函数会引用a,a通过onclick引用匿名函数
}




0
jQer
jQer
这叫P的内存泄露
0
forthxu
forthxu
button.conclick指向闭包函数地址内存未回收
返回顶部
顶部