GC与JS内存泄露(4)

作者:alucard 来源:Alibaba.com UED 时间:2010-09-25 19:01:00 

二、闭包(Closures)

仍然先看一段代码:

< html >
     < head >
         < script language = “ JScript “ > function  AttachEvents(element)
        {
             //  This structure causes element to ref ClickEventHandler 
            element.attachEvent( “ onclick “ , ClickEventHandler); function  ClickEventHandler()
            {
                 //  This closure refs element   
            }
        } function  SetupLeak()
        {
             //  The leak happens all at once
            AttachEvents(document.getElementById( “ LeakedDiv “ ));
        } </ script >
     </ head > < body onload = “ SetupLeak() “   >
         < div id = “ LeakedDiv “ ></ div >
     </ body >
</ html >

闭包的一个内部方法赋给了element对象,产生了一个作用域的循环引用,从而造成内存泄露。其原理图如下:

解决方案如下,在确定事件不再使用后,解除事件的绑定:

function BreakLeak() { document.getElementById(”LeakedDiv”).detachEvent(”onclick”, document.getElementById(”LeakedDiv”).expandoClick);  document.getElementById(”LeakedDiv”).expandoClick = null; }

通常情况下,常用的js框架都帮我们解决了这个问题,不需要我们自己处理,这也是使用框架的一个好处。

标签:内存,js,javascript,IE
0
投稿

猜你喜欢

  • 如何使用微信公众平台开发模式实现多客服

    2023-11-14 17:48:37
  • 基于Python 装饰器装饰类中的方法实例

    2023-10-11 04:10:22
  • python3 对list中每个元素进行处理的方法

    2022-05-31 13:41:41
  • 两行 JavaScript 代码

    2010-08-31 14:57:00
  • Python+OpenCV+pyQt5录制双目摄像头视频的实例

    2021-12-22 02:07:24
  • python-opencv实现视频指定帧数间隔图像的保存功能

    2021-05-28 16:51:50
  • 实际应用:MySQL5存储过程编写

    2008-11-11 12:25:00
  • MSSQL报错:参数数据类型 text 对于 replace 函数的参数 1 无效的解决办法

    2024-01-27 09:04:15
  • 使用Django xadmin 实现修改时间选择器为不可输入状态

    2023-11-19 12:12:06
  • PHP根据IP判断地区名信息的示例代码

    2023-09-10 14:05:55
  • python实现Flappy Bird源码

    2021-12-01 21:49:19
  • Python urllib 入门使用详细教程

    2023-03-02 10:48:35
  • Python logging日志库空间不足问题解决

    2021-08-24 15:59:17
  • 自己重新写了一个JavaScript的对象克隆函数

    2008-08-03 16:47:00
  • python初学之用户登录的实现过程(实例讲解)

    2023-03-16 17:27:37
  • php版银联支付接口开发简明教程

    2023-11-24 00:27:41
  • Python进阶之递归函数的用法及其示例

    2021-07-01 04:34:57
  • 详解Python list和numpy array的存储和读取方法

    2022-05-04 05:58:10
  • 解析Vue2.0双向绑定实现原理

    2024-06-05 15:29:32
  • 使用 TRUNCATE TABLE 删除所有行

    2008-04-24 19:20:00
  • asp之家 网络编程 m.aspxhome.com