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 在原型(prototype)内部 - 突然看起来不对劲。
也请随时给我指一个更好的柜台,可以做这个正在做的事情,例如在延迟后开始,在给定时间后重复,并在由 CSS 设置样式的页面上有多个计数器。
更新
尝试 setInterval 使整个倒计时非常不稳定 http://jsfiddle.net/mplungjan/z2AQF/
最佳答案
如果真的是内存泄漏,尝试从传递给 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);
};
关于javascript - IE8内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7540604/