gpt4 book ai didi

javascript - IE8内存泄漏?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:28 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com