40

鉴于此代码:

bob = setInterval(function, 1000);
clearInterval(bob);

现在有没有办法知道该间隔是否已清除?

目前,我自己通过取消设置''来跟踪这一点bob,但我很好奇我的额外代码行是否不必要:

clearInterval(bob);
bob = null;
if (!bob) itIsCleared();

谢谢!

4

3 回答 3

40

返回值setInterval只是您用来传递回. 它不是带有任何附加信息的结构化对象,也不会在您调用.clearIntervalclearTimeout

于 2009-09-24T01:26:37.437 回答
7

bob 仅包含用于清除它的间隔的 id。当您调用 clearInterval 时,它会获取与该 id 关联的时间间隔并将其清除。id根本没有改变。

请参阅此处进行演示

例子:

<html>
<head>
<title>Javascript clearInterval</title>
</head>
<body onload="startInterval();">

<center>
    <div id="myTime"></div>

    <input type="button" value="start Interval" onclick="startInterval();" />

    <input type="button" value="stop Interval" onclick="stopInterval();" />
</center>

<script language="javascript">

var interval;

function startInterval()
{
    // setInterval of 1000 milliseconds i.e. 1 second
    // to recall the startTime() method again n again
    interval = setInterval("startTime();", 1000);
}

function startTime()
{
    // Date object to get current time
    var timeFormat = new Date();

    // set the current time into the HTML div object.
    document.getElementById('myTime').innerHTML = timeFormat.toLocaleTimeString();
}

function stopInterval()   //***********IMPORTANT FUNC******************
{
    // clearInterval to stop the setInterval event
    alert(interval);  
    clearInterval(1);

}

</script> 

</body>
</html>

这将向您显示间隔的 id(由 setInterval 之前返回)。如果您知道区间的 id 为 1,则可以使用 clearInterval(1) 清除区间。因此,您使用将 bob 设置为 null 的方法是一种很好的方法。只要确保 !bob 如果 bob 恰好为 0,它就不会返回 true。:D

于 2009-09-24T01:36:20.583 回答
3

所以这是一个很晚的答案,但如果你做这样的事情

this.myInterval = setInterval(....);
this.myInterval = clearInterval(this.myInterval);

它将强制变量myInterval未定义,因此您可以通过执行检查间隔的清除if(!this.myInterval)

于 2021-07-19T14:05:58.513 回答