A JavaScript Fancier

伟大的javascript技术研究中...

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  304 随笔 :: 0 文章 :: 479 评论 :: 0 Trackbacks


觉得作者的思路实在绝妙,很佩服!以前也曾经对这样的问题很无奈,没想到居然还能有如此一招!
<div id="d1"></div>
<script >
function createButton(){
         
var obj = document.createElement("button");
          obj.innerHTML
="点我!";
          obj.onclick
=function(){
                      
//处理click事件
            }
          obj.onmouseover
=function(){
                   
//处理mouseover事件
         }
        
return obj;//这里由于需要返回创建的对象,所以不能把obj直接设为null. return 后obj是局部变量,不能在外部断开其与HTMLElement的引用.ie中将出现问题泄漏问题
}
var 按钮 = document.getElementsById("d1").appendChild( createButton());
按钮.做某些事();
按钮.做某些事();
..
某些东西.某些事(按钮);

</script>

这种写法在IE中100%内存泄漏

使用try finally很容易解决些问题

function createButton(){
         
var obj = document.createElement("button");
          obj.innerHTML
="点我!";
          obj.onclick
=function(){
                      
//处理click事件
            }
          obj.onmouseover
=function(){
                   
//处理mouseover事件
         }
        
try{
            
return obj;
        }
finally{
              obj 
= null;//这句话在return 之后才执行 , 的效的解决了需在return后将obj置null的问题
       }
}

一个函数或方法中,其实有很多地方都需要这种选返回值,最后执行某些事的
posted on 2008-06-18 14:58 Yemoo'S JS Blog 阅读(2538) 评论(3)  编辑 收藏 引用 所属分类: javascript技巧总结

评论

# re: try finally 妙用,防止内存泄漏【转自51js】 2008-07-10 15:26 js学习
好办法!  回复  更多评论
  

# re: try finally 妙用,防止内存泄漏【转自51js】 2009-08-06 19:27 Yvon
偶然看到,原来可以这样解决,谢谢了  回复  更多评论
  

# re: try finally 妙用,防止内存泄漏【转自51js】 2009-10-19 16:47 anya
每次都要搞 太麻烦了  回复  更多评论
  

只有注册用户登录后才能发表评论。