使用clearInterval方法实现的是将区间变量引用设置为null,而不是

What does using clearInterval method accomplish that setting an interval variable reference to null does not?

本文关键字:设置 null 引用 区间 方法 clearInterval 实现 使用 变量      更新时间:2023-09-26

我在JavaScript服务文件中有一个重置方法,可以将服务中的所有变量重置为null。有些变量包含间隔计时器引用。我注意到使用reset方法似乎会取消间隔(事实上不应该是这样,但它确实出现在我的Angular应用程序中)。

我的问题是,将间隔引用设置为null是否与使用clearInterval(name)正式清除间隔具有相同的效果?我应该知道有什么技术上的差异吗?

var myInterval = window.setInterval(function () { console.log('interval fired'); }, 500);
// Are these two equivalent?
myInterval = null;
clearInterval(myInterval);

我注意到规范中似乎有一个WindowTimers接口,这就是clearInterval方法的来源。我的猜测是,调用clearInterval会从某种列表或数组中删除命名引用。如果我将计时器设置为null,它是否会作为一个无法执行的null对象留在WindowTimers列表中?

间隔计时器"句柄",或者你想怎么称呼它,只是一个数字。它向运行时标识计时器,但在其他方面没有什么特别之处。变量中的值不会使变量比任何其他值都更特别,因此将变量重置为null对计时器没有任何影响。

您可以打开浏览器开发人员控制台并键入以下内容:

console.log(setTimeout(function(){}, 1))

你会看到一个数字。把它运行几次,你会看到一系列不断增加的数字。

将myInterval变量设置为null不会停止间隔。如果你在Chrome的开发者工具中尝试这些代码,你可以看到这一点。只有在调用clearInterval之后,console.log调用才会停止。