www.jhpeng.com

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的問題
       }
}
一個函數或方法中,其實有很多地方都需要這種選返回值,最後執行某些事的

 

來源:http://bbs.51js.com/viewthread.php?tid=76615&extra=page%3D1

0 意見:

張貼意見