用try finally来避免内存泄露。

觉得作者的思路实在绝妙,很佩服!以前也曾经对这样的问题很无奈,没想到居然还能有如此一招!

< 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的问题
       }
}


一个函数或方法中,其实有很多地方都需要这种选返回值,最后执行某些事的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值