+ -
当前位置:首页 → 问答吧 → 这段代码为什么会引起内存泄露?

这段代码为什么会引起内存泄露?

时间:2010-05-21

来源:互联网

这里有什么循环引用么?
复制内容到剪贴板
代码:
<html>
    <body>
    <script type="text/javascript">
    document.write("Program to illustrate memory leak via closure");
    window.onload=function outerFunction(){
        var obj = document.getElementById("element");
        obj.onclick=function innerFunction(){
        alert("Hi! I will leak");
        };
        obj.bigString=new Array(1000).join(new Array(2000).join("XXXXX"));
        // This is used to make the leak significant
    };
    </script>
    <button id="element">Click Me</button>
    </body>
    </html>

作者: RobinQu   发布时间: 2010-05-21

复制内容到剪贴板
代码:
obj.bigString=new Array(1000).join(new Array(2000).join("XXXXX"));
这句代码,干吗用?很强悍啊!
从右到左分析,先将五个X字符 链接 1999次 ,也就是 1999*5个X字符
然后又 999*1999*5个 字符 = 9985005个字符
给 button元素添加这个属性 会花费不少时间的!

作者: fonqing   发布时间: 2010-05-21

引用:
原帖由 fonqing 于 2010-5-21 12:32 发表

obj.bigString=new Array(1000).join(new Array(2000).join("XXXXX"));

这句代码,干吗用?很强悍啊!
从右到左分析,先将五个X字符 链接 1999次 ,也就是 1999*5个X字符
然后又 999*1999*5个 字符 = 9985005 ...
这个是为了使泄露更明显~
但是在我的机器毫无效果

作者: RobinQu   发布时间: 2010-05-24

window.onload = function fn(){}这样就已经有循环引用了
首先window.的onload属性关联了fn
fn中的this关联了window
解决的方法obj = null最后加上这个
在onload里

作者: campaignZH   发布时间: 2010-05-24

引用:
原帖由 campaignZH 于 2010-5-24 18:03 发表
window.onload = function fn(){}这样就已经有循环引用了
首先window.的onload属性关联了fn
fn中的this关联了window
解决的方法obj = null最后加上这个
在onload里
清除obj怎么会影响函数的this关键字的引用呢……
就算清楚了,window的循环引用还是存在啊?
所以,一定是window的引用再循环么?

作者: RobinQu   发布时间: 2010-05-28