我在JavaScript服务文件中有一个reset方法,它将服务中的所有变量重置为null。一些变量保持间隔定时器引用。我注意到使用reset方法似乎取消了间隔(实际上不应该是这种情况,但它确实出现在我的Angular应用程序中)。
我的问题是,将间隔引用设置为null与使用clearInterval(名称)正式清除间隔具有相同的效果吗?我应该注意哪些技术差异?
var myInterval = window.setInterval(function () { console.log('interval fired'); }, 500);
// Are these two equivalent?
myInterval = null;
clearInterval(myInterval);
我注意到规范中似乎有一个WindowTimers接口,这就是clearInterval方法的来源。我的猜测是调用clearInterval会从某种列表或数组中删除命名引用。如果我将计时器设置为null,它是否作为一个无法执行的空对象留在WindowTimers列表中?
答案 0 :(得分:4)
间隔计时器"句柄"或任何你想要调用它的只是一个数字。它标识了运行时的计时器,但它没有什么特别之处。变量中的值不会使变量比任何其他值更特殊,因此将变量重置为null
对计时器完全没有影响。
您可以打开浏览器开发者控制台并输入:
console.log(setTimeout(function(){}, 1))
你会看到一个号码。运行几次,你会看到一系列不断增加的数字。
答案 1 :(得分:0)
将myInterval变量设置为null不会停止间隔。 如果您在Chrome中的开发者工具中尝试该代码,则可以看到。只有在调用clearInterval后,console.log调用才会停止。