IE8中的内存泄漏?

时间:2011-09-24 17:23:11

标签: javascript internet-explorer-8

http://jsfiddle.net/mplungjan/SyHFR/

对于凌乱的代码感到抱歉 - 我修改了一个我未选择并且最初来自Dynamic Drive的脚本 - 它被我正在帮助的人使用,而不是从头开始重写整个事情,我同意了功能蠕变。预期的更改是通过vars添加重复和延迟

现在我只想了解可能存在问题的地方 - 我每隔一秒就使用一个日期对象更改代码,仅在初始化时使用它。

代码

cdtime.prototype.updateTime=function(){
  var thisobj=this;
  this.currentTime+=1000; // one second
  setTimeout(function(){thisobj.updateTime()}, 1000) //update time every second
}

给出

消息:'thisobj'为空或不是对象

在XP上的IE8中大约9个小时后

我周末在另一个盒子上自己运行它,但是想知道是否有人可以告诉我IE的问题可能是什么。

HMM - 现在粘贴功能,我看到settimeout在原型中 - 突然看起来不正确。

也请随意指出一个更好的计数器,它可以做到这一点,例如延迟后开始,在给定时间后重复,并在CSS设置的页面上有多个计数器。

更新

尝试使用setInterval会使整个coundown变得非常不稳定 http://jsfiddle.net/mplungjan/z2AQF/

1 个答案:

答案 0 :(得分:1)

如果确实是内存泄漏,请尝试从传递给thisobj的函数中清除setTimeout变量:

cdtime.prototype.updateTime = function () {
    var thisobj=this;
    this.currentTime+=1000; // one second
    setTimeout(function () {
        thisobj.updateTime();
        thisobj = null;
    }, 1000); //update time every second
};

如果你仔细观察,这个函数基本上是一个区间,所以下面会更加优化,因为它不会叠加在旧函数上:

cdtime.prototype.updateTime = function () {
    var thisobj = this;
    setInterval(function () {
        thisobj.currentTime += 1000;
    }, 1000);
};