asfman
有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。
posts - 83,  comments - 145,  trackbacks - 0

经ie7测试
function myButton()
{
    var container=document.createElement("button");
    /*container.style......*/
    var text=document.createElement("button");
    /*text.style......text.innerText......*/

    text.onclick=EventBuilder(container);
    //在这里无论是上面这种写法还是直接写function(){}结果占用内存都一样
    //只有直接引用外部函数如text.onclick=EventBuilder才能释放button对象,减少内存
    document.body.appendChild(container);
    document.body.appendChild(text);
    //如果onmouseover中我没有用到container 当然可以用 text=null container=null来打破循环引用
    //经测试用null打不破循环
}

function EventBuilder(container)
{
    return function(e)
    {
        alert(container)//这里container可访问
        text=this;//用this访问自身
    }
}
for(var i =0;i<5000;i++)
myButton()
//conclusion
闭包使返回的内部函数持有私有变量,所以此私有变量持有的dom对象不能被回收。
(被回收的条件:1。 没有context 2。没有被引用 )
不内部写function。把内部变量传递给外部函数闭包返回不能解决问题。
所以唯一的方法是直接引用外部函数,如text.onclick = outFunc;

posted on 2007-12-14 08:54 汪杰 阅读(92) 评论(2)  编辑 收藏 引用 所属分类: javascriptExtjquery

FeedBack:
# re: 关于泄漏
2007-12-15 13:57 | 汪杰
可能只要没有对local variables的引用,就会释放内存。
所以按winter的方法可以解决泄露吧  回复  更多评论
  
# re: 关于泄漏
2007-12-15 14:00 | 汪杰
Javascript的垃圾回收机制
在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。   回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
 
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:




<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(12)

随笔分类

随笔档案(83)

文章分类(618)

文章档案(595)

收藏夹

http://blog.csdn.net/prodigynonsense

最新随笔

搜索

  •  

积分与排名

  • 积分 - 104836
  • 排名 - 9

最新随笔

最新评论

阅读排行榜

评论排行榜