JS闭包循环引用导致内存泄漏之解决方法
来源:互联网 发布:组策略限制软件安装 编辑:程序博客网 时间:2024/06/05 07:09
方法一、主动设置JS对象element为空,打破循环引用
function assignHandler()
{var element=document.getElementById("div1");
var id=element.id;
element.onclick=function() //element的onclick引用了函数funciton,function通过闭包引用了element,照成循环引用
{
alert(id+element+sex);
}
/*闭包可以监听外部变量的变化,所以这里把element=null,也就是说外部这个变量相当于不存在了,虽然赋值是在闭包后面,闭包也能够检测到!所以匿名函数不会有外部的DOM对象的引用,不会内存泄漏*/
var sex="female";
element=null;
}
方法二、通过添加另外一个闭包来避免JS对象和DOM对象之间的循环引用
window.onload=function outerFunction()
{
var anotherObj=function innerFunction()
{
alert("I have avoided the leak!");
}
//通过另外一个闭包来避免JS对象和DOM对象之间的循环引用
function anotherInnerFunction()
{
var obj=document.getElementById("div1");
//DOM对象引用了anotherObj函数,但是anotherObj函数无法引用DOM对象
obj.onclick=anotherObj;
};
anotherInnerFunction();
}
方法三、通过添加另一个函数来避免闭包本身,进而阻止内存泄漏
window.onload=function()
{
var obj=document.getElementById("div1");
obj.onclick=doesNotLeak;
}
//该函数无法访问上面匿名函数中间的obj对象,从而可以阻止内存泄漏!
function doesNotLeak()
{
alert("我已经阻止内存泄漏了!");
}
0 0
- JS闭包循环引用导致内存泄漏之解决方法
- 循环引用导致内存泄漏
- 循环引用导致内存泄漏
- 使用ARC时因为循环引用导致内存泄漏
- JS闭包与内存泄漏
- Volley的引用导致内存泄漏
- 使用cvLoadImage导致内存泄漏的解决方法
- 常规循环引用内存泄漏和Closure内存泄漏
- 常规循环引用内存泄漏和Closure内存泄漏
- Dom元素+闭包+循环调用+js移除对象+IE6/7 --> 内存泄漏
- 单例中引用Context导致内存泄漏的问题
- cvLoadImage导致内存泄漏的解决方法(run in HUST)
- maven catalogs 导致的eclipse内存严重泄漏解决方法
- ios开发之使用block引发循环引用导致内存泄露
- android 内存泄漏之Context--整理-引用
- 闭包内存泄漏问题
- 闭包中的内存泄漏
- IE内存泄漏补充:关于循环引用的详细解释
- Android代码混淆
- PHP变量命名规则
- List集合排序
- [JIRA]最新Linux版本jira6.3.6安装汉化破解以及数据迁移
- PLSQL设置快捷键
- JS闭包循环引用导致内存泄漏之解决方法
- 活动类数据查询模板
- 理解矩阵
- Linux的进程操作
- databindings 绑定Nullable<DateTime>
- 工厂方法模式
- Android ListView工作原理完全解析,带你从源码的角度彻底理解
- Eclipse使用Ant编译提示Class not found: javac1.8【转载】
- STL之map和set