经ie7测试
function myButton()
{
var container=document.createElement("button");
/*container.style......*/
var text=document.createElement("button");
/*text.style......text.innerText......*/
text.onclick=EventBuilder(container);
//在这里无论是上面这种写法还是直接写function(){}结果占用内存都一样
//只有直接引用外部函数如text.onclick=EventBuilder才能释放button对象,减少内存
document.body.appendChild(container);
document.body.appendChild(text);
//如果onmouseover中我没有用到container 当然可以用 text=null container=null来打破循环引用
//经测试用null打不破循环
}
function EventBuilder(container)
{
return function(e)
{
alert(container)//这里container可访问
text=this;//用this访问自身
}
}
for(var i =0;i<5000;i++)
myButton()
//conclusion
闭包使返回的内部函数持有私有变量,所以此私有变量持有的dom对象不能被回收。
(被回收的条件:1。 没有context 2。没有被引用 )
不内部写function。把内部变量传递给外部函数闭包返回不能解决问题。
所以唯一的方法是直接引用外部函数,如text.onclick = outFunc;
posted on 2007-12-14 08:54
汪杰 阅读(382)
评论(2) 编辑 收藏 引用 所属分类:
javascript 、
Ext 、
jquery