javascript - IE8内存泄漏?

标签 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 在原型(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/

相关文章:

javascript - -ms-filter 与 JavaScript

javascript - getElementsByTagName 和 getElementsByClassName 在 IE8 中不起作用

javascript - 需要以其他格式显示日期的日期选择器

javascript - 鼠标悬停导航链接不起作用

javascript - 如何在 Typescript 中为 webpack.config.ts 创建一个 switch case?

css - ie8 : is there possible to have transform in pseudo element?

html - IE8 中没有边框半径,css3PIE 不工作?

javascript - 如何将此文本的背景图像设置为 svg?

javascript - jQuery $.each 范围

internet-explorer-8 - IE8 中的 CSS background-size,background-size-polyfill 不起作用