Javascript:使对象无效时不会删除 setInterval

标签 javascript object javascript-objects

即使对象已无效,setInterval 函数仍继续运行,我应该先将 setInterval var 更改为 null 还是应该执行其他操作?另外,即使 setInterval 仍在运行,GC 也会删除该对象吗?

Test = function(){
    function start(){
        // setTimout for controllable FPS
        var loop = setInterval(function(){
            console.log("TEST");
        }, 1000);
    }

    start();
};


var test = new Test();

setTimeout(function(){
    console.log("DIE!!");
    test = null;
}, 2000);

JsFiddle

最佳答案

setInterval 返回的值只是一个数字,用于标识对间隔的引用。您不能只是将其设为 null - 您需要在引用上调用 window.clearInterval。

您发布的代码中还有一些其他内容没有意义。例如,您在函数中声明一个函数,然后只调用它一次。我认为这可能更接近你想要的:

var Test = function(){
  this.start();
}
Test.prototype = {
  loop : null,
  start : function(){
    this.loop = window.setInterval(function(){
      console.log('TEST');
    }, 1000);
  },
  stop : function(){
    window.clearInterval(this.loop);
  }
}

var test = new Test();
window.setTimeout(function(){
  test.stop();
}, 5000);

这将运行间隔 5 次。

FWIW,GC 并没有真正参与其中。只要存在对任何变量的引用,就不会收集它。

HTH

关于Javascript:使对象无效时不会删除 setInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22335152/

相关文章:

JavaScript 对象作为函数的参数

javascript - socket.io 和 node.js 的区别

javascript - Phonegap 是否支持 WebRTC?

javascript - 在 Nashorn 中跨上下文共享原生 JavaScript 对象

javascript - 在 Java 中访问 JavaScript 对象的字段

php - 调用的子常量在父级的静态函数中不可用

scala - 前向引用扩展了值(value)问题的定义

具有长类名和字段名的 Java 默认序列化

Javascript:像搜索查询字符串一样解析数组

JavaScript 对象操作在唯一操作后显示不同键的相同值