国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 淮滨县| 景德镇市| 井研县| 乌鲁木齐县| 姜堰市| 武邑县| 且末县| 环江| 崇阳县| 永登县| 墨竹工卡县| 青龙| 永仁县| 澎湖县| 桦甸市| 桃园县| 南充市| 荣成市| 河南省| 屏东市| 威海市| 洛南县| 永川市| 电白县| 温宿县| 沂水县| 揭东县| 泗阳县| 临泉县| 阳西县| 无棣县| 岳阳县| 平昌县| 崇左市| 青川县| 东兴市| 若尔盖县| 图片| 祁门县| 广州市| 阳春市|