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