Javascript:取消对象时不会删除setInterval

时间:2014-03-11 19:48:59

标签: 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

1 个答案:

答案 0 :(得分:3)

setInterval返回的值只是一个用于标识间隔引用的数字。你不能把它归零 - 你需要在引用上调用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