麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

關于js內存泄露的一個好例子

2019-11-20 21:30:18
字體:
來源:轉載
供稿:網友

我把別人的例子改了一下,覺得這樣寫更緊湊!套用別人的原話,當一個DOM對象包含一個Js對象的引用(例如一個Event Handler), 而這個Js對象又持有對這個DOM對象的引用時,一個環狀引用就行成了,于是在ie下就出現了內存泄露。點擊“運行代碼”并打開任務管理器看內存變化。分別在ie8和ff下測試,差距不用多說。

運行代碼

復制代碼 代碼如下:

<html>
  <head>
    <title>Memory leak</title>
    <style>
     body{
       padding: 10px;
     }
    </style>
  </head>
  <body>
  </body>
  <script>
    var q = [];
    var n = 0;
    setInterval(function(){
      q.push(makeSpan());
      if(q.length>=10){
        var s = q.shift();
        if(s){
          s.parentNode.removeChild(s);
        }
      }
      n++;
    },10);

    function makeSpan(){
      var s = document.createElement("span");
      document.body.appendChild(s);
      var t=document.createTextNode("*** " + n + " ***");
      s.appendChild(t);
      s.onclick=function(e){
                s.style.backgroundColor="red";
                alert(n);
            };
            return s;
    };
  </script>
</html>

那么在ie下該怎么解決呢?

在刪除節點的時候,手動破除環狀引用,把里面setInterval那段代碼稍微改動以下:

復制代碼 代碼如下:

setInterval(function(){
  q.push(makeSpan());
  if(q.length>=10){
    var s = q.shift();
    if(s){
     s.onclick = null;//關鍵在這里
      s.parentNode.removeChild(s);
    }
  }
  n++;
},10);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品jk白丝蜜臀av软件 | av国产免费 | 欧美a区 | 精品久久久久久成人av | 在线免费观看欧美 | 国产成年人小视频 | 91 在线免费观看 | 久久99深爱久久99精品 | 欧美一级免费视频 | 免费一级高清毛片 | www.91视频com | 久久免费精品 | 欧美第1页| 久久国产精品久久久久久久久久 | 爱草成年| 最新在线黄色网址 | 久久久久久久久久久久久久国产 | 免费看成人毛片 | 久草成人在线 | 国产精品亚洲三区 | 亚洲五码在线观看视频 | 黄网站免费在线看 | 天天看天天摸天天操 | 欧美色另类 | 欧美日韩免费看 | 午夜精品成人一区二区 | 久久精品一区二区三区国产主播 | 爱爱视频天天干 | 久久精品一区二区三区不卡牛牛 | 一级做a爱片性色毛片 | 成人毛片免费播放 | 国产一区精品在线观看 | 国产一国产一级毛片视频 | 成人一级免费视频 | 欧美精品一区二区久久 | 久久久久久亚洲综合影院红桃 | 国内免费视频成人精品 | 成人毛片网 | 精品一区二区三区日本 | 视屏一区 | 久久91精品久久久久清纯 |