WEB开发网
开发学院网页设计JavaScript 浏览器中的内存泄露(重新整理ing) 阅读

浏览器中的内存泄露(重新整理ing)

 2010-09-14 13:27:58 来源:WEB开发网   
核心提示: function bindEvent(){var obj=document.createElement("XXX");obj.onclick=onclickHandler;}function onclickHandler(){//do something}functio

function bindEvent()
{
  var obj=document.createElement("XXX");
  obj.onclick=onclickHandler;
}
function onclickHandler(){
  //do something
}
  
function bindEvent()
{
  var obj=document.createElement("XXX");
  obj.onclick=function(){
    //Even if it's a empty function
  }
  obj=null;
}

这两个方法都打断了循环引用,可以解决问题,但是似乎对代码表达能力造成了一定破坏,假设有这么一个问题:

function bindEvent()
{
  var obj=document.createElement("XXX");
  var var0="OOXX";//Here is a variable
  obj.onclick=function(){
    alert(var0);//I want to visit var2 here!
  }
  return obj;//bindEvent must return obj!
}

好了 这下两种办法都不行了,假如我把函数写外面去,var0肯定访问不了,假如我把obj弄成null,还怎么return它呢?这并不是空想的需要,这实际上是一个用JS定制DOM控件的简单抽象:创建DOM元素、设置私有属性、绑定事件。所以,我们必须update一下两个方法。首先,方法1,为了让函数能访问某些变量,我们可以通过一个Builder函数来订制onclick的外部闭包:

function bindEvent()
{
  var obj=document.createElement("XXX");
  var var0="OOXX";//Here is a variable
  obj.onclick= onclickBuilder(var0);//想访问谁就把谁传进去!!
  return obj;//bindEvent must return obj!
}
function onclickBuilder(var0)//这里跟上面对应上就行了 最好参数名字也对应上
{
  return function(){
    alert(var0);
  }
}

上一页  1 2 3 4  下一页

Tags:浏览器 内存 泄露

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接