当前位置: 代码迷 >> JavaScript >> 关于内存泄漏,请各位看看解决方案
  详细解决方案

关于内存泄漏,请各位看看解决方案

热度:59   发布时间:2012-06-18 13:23:36.0
关于内存泄漏,请各位看看
一个说法是对Dom的循环操作会引起内存泄漏,一下是一个例子:
JScript code

function init() {
    var el = document.getElementById('MyElement');
el.onclick = function () {……}
}
init();


下面是对此的解释:init在执行的时候,当前上下文我们叫做context。这个时候,context引用了el,el引用了function,function引用了context。这时候形成了一个循环引用。

el引用了function,这个function指的是el的click事件处理函数么?如果是的话,这个function的context不是应该是el么?对此还是有些不能理解,求各位指点一二,多谢各位了。

------解决方案--------------------
不能把...没发现什么泄漏啊...不懂...我这执行很正常...
HTML code
<html>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
</HEAD>
<body>
<div>
<input type="button" value="aaaa">
<br>
<input type="button" value="bbbb" id="MyElement">
</div>
<SCRIPT type="text/javascript">
function init() {
var el = document.getElementById('MyElement');
el.onclick = function () {alert('haha');};
}
init();
</SCRIPT>
</body>
</html>

------解决方案--------------------
JScript code

function init() {
    var el = document.getElementById('MyElement');
    var a=1;
    var tmp=function(){alert(a)};
    el.onclick = tmp;
}
init();

------解决方案--------------------
探讨

JScript code

function init() {
var el = document.getElementById('MyElement');
var a=1;
var tmp=function(){alert(a)};
el.onclick = tmp;
}
init();


这样似乎就容易明了了,init的context引用了el;el引用……

------解决方案--------------------
探讨
但是我觉得这些应该不会导致内存泄露。我觉得只是一般的闭包应用。

------解决方案--------------------
我也没有发现什么内存泄露的问题
  相关解决方案