关于js内存泄露的一个好例子

 更新时间:2013年12月09日 09:53:09   作者:  
这篇文章主要介绍了关于js内存泄露的一个好例子。需要的朋友可以过来参考下,希望对大家有所帮助

我把别人的例子改了一下,觉得这样写更紧凑!套用别人的原话,当一个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);

相关文章

  • JS+CSS3实现超炫的散列画廊特效

    JS+CSS3实现超炫的散列画廊特效

    这篇文章主要为大家详细介绍了JS+CSS3实现超炫的散列画廊特效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • 一文详解uniapp中如何使用easycom自定义组件

    一文详解uniapp中如何使用easycom自定义组件

    easycom是uniapp的一种组件自动引入的规则,使用这种规则可以使满足规则的组件无需注册直接使用,下面这篇文章主要给大家介绍了关于uniapp中如何使用easycom自定义组件的相关资料,需要的朋友可以参考下
    2023-05-05
  • layer弹出子iframe层父子页面传值的实现方法

    layer弹出子iframe层父子页面传值的实现方法

    这篇文章主要介绍了layer弹出子iframe层父子页面传值的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • JS实现随机抽取三人

    JS实现随机抽取三人

    这篇文章主要为大家详细介绍了JS实现随机抽取三人,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • JS实现移动端判断上拉和下滑功能

    JS实现移动端判断上拉和下滑功能

    通过手指触屏,利用touchstart和touchend计算前后滑动距离,判断是上拉还是下滑。接下来通过实例代码给大家介绍js移动端判断上拉和下滑功能,感兴趣的朋友一起看看吧
    2017-08-08
  • Exif.js图片旋转修正的方法

    Exif.js图片旋转修正的方法

    这篇文章主要为大家详细介绍了Exif.js图片旋转修正的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • axios拦截器机制的实现原理详解

    axios拦截器机制的实现原理详解

    axios 不仅提供了一套跨平台请求,另外还提供了“拦截器”这一中间件机制,方便你在请求之前、响应之后做些操作处理,本文给大家详细介绍了axios 拦截器机制是如何实现的,需要的朋友可以参考下
    2024-05-05
  • js前端如何写一个精确的倒计时代码

    js前端如何写一个精确的倒计时代码

    关于写倒计时大家可能都都比较熟悉,使用 setTimeout 或 setInterval 就可以搞定。几秒钟或者几分钟的倒计时这样写没有问题,但是如果是长时间的倒计时,这样写就会不准确
    2019-10-10
  • 详解小程序rich-text对富文本支持方案

    详解小程序rich-text对富文本支持方案

    目前小程序使用比较多的富文本方案一个是小程序自带的rich-text组件,一个是wxPrase,本篇文章主要介绍了详解小程序rich-text对富文本支持方案,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 浅谈JavaScript中数组的增删改查

    浅谈JavaScript中数组的增删改查

    下面小编就为大家带来一篇浅谈JavaScript中数组的增删改查。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06

最新评论