3

SetInterval によって返された値で clearInterval を呼び出すと、その値は null または未定義になります。

setInterval をクリアするために clearInterval を呼び出していますが、どうやら setInterval の値は同じままで、 clearInterval を呼び出した後でも変更されません。t は null または undefined であると想定されていますか? ここに私のコードスニペットがあります

var setIntervalId; // declared in global scope
//lined of code

function autorefresh() {
  if (statesCount > 0) {
    setIntervalId = setInterval(function() {
        //lines of code
        // calling some handler
    }, 30000);
  }

  if (statesCount === 0) {
    clearInterval(setIntervalId);
  }
}

ご覧のとおり、30 秒ごとに setInterval 関数を呼び出しています。最初に呼び出されたときに setIntervalId に値が割り当てられますが、clearInterval を呼び出した後でも値は持続します。clearInterval を呼び出した後、null または undefined になる必要がありますか?null または undefined になる必要がある場合は、ここでどうすればよいですか。グローバル スコープで setIntervalId を定義しました。

4

4 に答える 4

8

この関数clearIntervalは、渡された値をクリアしません。クリアしたいなら自分でやるしかない

clearInterval(setIntervalId);
setIntervalId = undefined;

への最初の呼び出しを適切に保護しているようには見えないことに注意してくださいsetInterval。これにより、コールが複数回行われる可能性があり、したがって、複数の間隔設定が必要になります。if最初のブロックを次のように拡張する必要があると思います

if (statesCount > 0 && typeof(setIntervalId) === 'undefined') { 
  ...
}
于 2013-03-14T15:38:13.113 に答える
7

clearInterval を呼び出した後、null または未定義になる必要がありますか?

いいえ。

ただの数字。間隔がクリアされたとき、その数は単なる歴史的な好奇心です。

undefined必要に応じて、使用後に明示的に割り当てることができclearIntervalます。関数が現在定期的に実行されているかどうかを追跡するために使用していない限り、これを行う必要はありません。

于 2013-03-14T15:38:29.723 に答える