国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

關(guān)于js內(nèi)存泄露的一個(gè)好例子

2019-11-20 21:30:18
字體:
供稿:網(wǎng)友

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

運(yùn)行代碼

復(fù)制代碼 代碼如下:

<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下該怎么解決呢?

在刪除節(jié)點(diǎn)的時(shí)候,手動(dòng)破除環(huán)狀引用,把里面setInterval那段代碼稍微改動(dòng)以下:

復(fù)制代碼 代碼如下:

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 淮安市| 茌平县| 阿拉善左旗| 白银市| 中西区| 澎湖县| 长治市| 深圳市| 洛宁县| 博客| 定襄县| 诏安县| 浠水县| 梅州市| 建德市| 班戈县| 德州市| 蓝山县| 台江县| 莲花县| 巴马| 当阳市| 嫩江县| 盈江县| 宝山区| 宁安市| 海丰县| 冕宁县| 贵港市| 招远市| 西华县| 新乡县| 余庆县| 太白县| 舟曲县| 鹤岗市| 建宁县| 万州区| 陈巴尔虎旗| 介休市| 时尚|