Javascript IE8内存泄漏?

Javascript IE8内存泄漏?,javascript,internet-explorer-8,Javascript,Internet Explorer 8,很抱歉代码混乱-我修改了一个不是我选择的脚本,最初来自Dynamic Drive-它是由我正在帮助的人使用的,而不是从头开始重写整个东西,我同意这个特性爬行。预期的更改是在VAR之后添加重复和延迟 现在我只想了解哪里可能会有问题-我将代码从每秒使用一个日期对象更改为仅在初始化时使用它 代码 cdtime.prototype.updateTime=function(){ var thisobj=this; this.currentTime+=1000; // one second se

很抱歉代码混乱-我修改了一个不是我选择的脚本,最初来自Dynamic Drive-它是由我正在帮助的人使用的,而不是从头开始重写整个东西,我同意这个特性爬行。预期的更改是在VAR之后添加重复和延迟

现在我只想了解哪里可能会有问题-我将代码从每秒使用一个日期对象更改为仅在初始化时使用它

代码

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设计的计数器

更新

尝试设定间隔会使整个国家变得非常动荡

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

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);
};

您好,您实际上希望通过修改代码来创建什么?这可能有助于回答。只是添加了延迟和重复。我不是100%确定,但不是创建引用thisobj的匿名函数来设置超时,是不是导致该函数不符合gc条件?可能-如果你能想出更好的方法来实现它(我的意思是更好的方法-你的回答在我看来不是更好的方法)我已经删除了我的答案,这是最新的提琴,也许它会让你/其他人找到更好的解决方案。使用interval使计数器非常不稳定和不准确。我正在尝试删除这个问题。我不太明白我能做到这一点。
delete thisobj
可能会返回
true
,即使什么都没有发生<代码>删除此OBJ将不起作用,因为它是使用
var
声明的。清除引用的正确方法是将其设置为
null
。谢谢-您有相关文档吗?文档:。我刚刚看了一下代码,它写的代码真的很糟糕。尝试重写它,去掉它的需求,并在此基础上构建新的代码。也许你应该完全放弃它,试试jQuery。