GC与JS内存泄露(4)
作者:alucard 来源:Alibaba.com UED 发布时间:2010-09-25 19:01:00
标签:内存,js,javascript,IE
二、闭包(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框架都帮我们解决了这个问题,不需要我们自己处理,这也是使用框架的一个好处。


猜你喜欢
- error类型是go语言的一种内置类型,使用的时候不用特定去import,他本质上是一个接口 type error interface{ E
- 本文实例讲述了Selenium元素的常用操作方法。分享给大家供大家参考,具体如下:Selenium是一个用于Web应用程序测试的工具。Sel
- 请问如何在Oracle Setver端检测ODBC是否连接好了?首先,在SQLPLUS安装时勾选oracle open client ada
- 很多人都已经把 Javascript的用的炉火纯青了,但见到defer未必就知道他是做什么用的;很多人也都遇到过这样的问题,需要直接执行别且
- Check In/Out功能简介:该功能是专门针对多用户管理而预设的。即多用户使用多帐号管理同一站点。
- 问题描述101/100,想要的结果是1,但是算出来的结果是1.01解决方案101 // 100结果图补充:python2 与 3:一般除法、
- 1、 下载MYSQL5.1.48源码,CMAKE,VS2008 2、 安装CMAKE和VS2008,解压MYSQL5.1.48到D:\mys
- 一、系统的默认用户1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是s
- 你是否曾经想在数据库中存储一个日期而没有时间部分,或者想存储一个时间值希望有更高的精度?在SQL Server 2008的介绍中,微软介绍了
- python字典怎么排序?定义一个字典类型mydict = {2: '小路', 3: '黎明', 1:
- 一个简单的php文件下载源代码,虽不支持断点续传等,但是可以满足一些常用的需求了。php下载文件其实用一个a标签就能实现,比如 <a
- 在说到什么是回表查询的时候,有两个概念需要先解释清楚:分别是聚集索引(聚簇索引)和非聚集索引(非聚簇索引)聚集索引和非聚集索引MySQL规定
- 在学习MySQL的过程中,常常会测试各种参数的作用。这时候,就需要快速构建出MySQL实例,甚至主从。 考虑如下场景:譬如我想测试
- 网页上的图片如果设置了alt属性,当鼠标移经时就会有tooltip出现,但是只能显示一行文本,有时需要多行文本,乃至图片来显示图片、链接或者
- 主要用到 str.charCodeAt()和 String.fromCharCode()方法--》使用 charCodeAt() 来获得字符
- 一、python机器学习–线性回归线性回归是最简单的机器学习模型,其形式简单,易于实现,同时也是很多机器学习模型的基础。对于一个给定的训练集
- 前言:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。官网给出
- 如下所示:update-alternatives --config python一条简单的命令,如下图所示:来源:https://blog.
- 本文实例为大家分享了pygame实现非图片按钮效果的具体代码,供大家参考,具体内容如下按钮类程序# -*- coding=utf-8 -*-
- 这篇文章主要介绍了如何通过python实现全排列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以