学习啦 > 学习电脑 > 电脑硬件知识 > 内存知识 > IE6内存泄漏怎么解决

IE6内存泄漏怎么解决

时间: 孙胜龙652 分享

学习啦在线学习网IE6内存泄漏怎么解决

  大家都知道,内存是电脑必不可少的一个硬件,所以说,关于内存会有各种各样的问题,学习啦小编就在这里给大家介绍IE6内存泄漏怎么解决。

  Hedger Wang 在国内 blog 上得到的方法:使用 try … finally 结构来使对象最终为 null ,以阻止内存泄露。

学习啦在线学习网   其中举了个例子:

学习啦在线学习网   function createButton() {

  var obj = document.createElement("button");

  obj.innerHTML = "click me";

  obj.onclick = function() {

学习啦在线学习网   //handle onclick

  }

  obj.onmouseover = function() {

  //handle onmouseover

  }

学习啦在线学习网   return obj;//return a object which has memory leak problem in IE6

  }

  var dButton = document.getElementById("d1").appendChild(createButton());

  //skipped....

  对于 IE6 中,引起内存泄露的原因,可看《Understanding and Solving Internet Explorer Leak Patterns》一文。

  上面的例子,应该属于上文中的 “Closures”原因。

  再看下用 try … finally 的解决方法:

  /**

  * Use the try ... finally statement to resolve the memory leak issue

  */

  function createButton() {

  var obj = document.createElement("button");

  obj.innerHTML = "click me";

  obj.onclick = function() {

学习啦在线学习网   //handle onclick

  }

  obj.onmouseover = function() {

学习啦在线学习网   //handle onmouseover

  }

学习啦在线学习网   //this helps to fix the memory leak issue

  try {

  return obj;

  } finally {

  obj = null;

  }

  }

学习啦在线学习网   var dButton = document.getElementById("d1").appendChild(createButton());

  //skipped....

  可能大家有疑问: finally 是如何解析的呢?

  答案是:先执行 try 语句再执行 finally 语句。

  例如:

学习啦在线学习网   function foo() {

  var x = 0;

  try {

  return print("call return " ( x));

  } finally {

  print("call finally " ( x));

  }

  }

学习啦在线学习网   print('before');

  print(foo());

学习啦在线学习网   print('after');

  返回的结果为:

学习啦在线学习网   print » before

  print » call return 1

  print » call finally 2

  print » true

  print » after

297648