web-dev-qa-db-ja.com

clearIntervalが呼び出されたかどうかを確認していますか?

このコードを考えると:

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

その間隔がクリアされたかどうかを知る方法はありますか?

現在、私は 'bob'の設定を解除することでこれを自分で追跡していますが、追加のコード行が不要かどうか知りたいです。

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

ありがとう!

37
swajak

setIntervalの戻り値は、clearIntervalに返すために使用する一意のIDにすぎません。これは、追加情報を持つ構造化オブジェクトではなく、clearTimeoutを呼び出したときにnullに設定されることもありません。

38
Rich

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に設定する方法は、それを行うための良い方法です。ボブがたまたま0の場合、!bobがtrueを返さないことを確認してください。:D

7