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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:57:08
字體:
供稿:網(wǎng)友
這篇文章主要介紹了關(guān)于js內(nèi)存泄露的一個(gè)好例子。需要的朋友可以過來參考下,希望對(duì)大家有所幫助

我把別人的例子改了一下,覺得這樣寫更緊湊!套用別人的原話,當(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ā)表

圖片精選

主站蜘蛛池模板: 武义县| 奈曼旗| 介休市| 偃师市| 渑池县| 沽源县| 双峰县| 科尔| 勃利县| 吉安市| 邹城市| 册亨县| 水富县| 华阴市| 扎囊县| 娄底市| 辽宁省| 临邑县| 镇江市| 宁夏| 苍南县| 陵水| 招远市| 曲麻莱县| 张家口市| 上栗县| 黔江区| 乌什县| 马公市| 二手房| 太谷县| 鹿泉市| 锡林郭勒盟| 嵊州市| 杭锦旗| 盐边县| 南皮县| 鄱阳县| 蕲春县| 米脂县| 都兰县|