即使对象无效,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);
答案 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