2017-03-09 10 views
4
function consoleTest() { 
    setInterval(function(){ 
    console.log('Hello World'); 
    }, 1000); 
} 

$('#button').on('click', function(){ 
    clearInterval(consoleTest); 
}); 

consoleTest(); 

ボタンをクリックすると簡単なアプリケーションが作成され、間隔を停止/一時停止します。私はそれを動作させる方法を知っている私はちょうど関数の外に変数を宣言し、そこにsetIntervalを含む必要がある今、私は関数を介して呼び出す場合clearIntervalが動作しない理由は、誰か私に説明してください。setIntervalが関数内にある場合、なぜclearIntervalが機能しないのですか?

答えて

5

これは、setIntervalcleaIntervalの正しい使用法です。 setIntervalは、両方の関数のスコープの変数に保持する必要がある値を返します。

var interval; 

function consoleTest() { 
    interval = setInterval(function() { 
     console.log('Hello World'); 
    }, 1000); 
} 

$('#button').on('click', function() { 
    clearInterval(interval); 
}); 

consoleTest(); 

さらに読書について::clearIntervalsetIntervalあなたは、間隔をクリアclearIntervalを使用し、パラメータとしてそれを変数を渡したいとき。

+2

Hey @RoryMcCrossan、私は説明を追加しました。それはあまりにも多くのトラブルではない場合、私はコメントセクションをクリアするappreicateだろう。 –

+0

ありがとうコビー、それは今私にとって意味をなさない。 – Ron

+0

うれしい私は助けることができます。ハッピーコーディング! –

1

ここには2つの問題があります。まず、返されたタイマーIDはどこでもsetInterval()に設定しないでください。 consoleTestは、clearInterval()に与えられるべきであるタイマーへの参照ではなく、タイマーをラップする関数です。第2に、両方の機能の範囲に入るためにタイマーリファレンスが必要です。これを念頭に置いて試してみましょう。

function consoleTest() { 
    return setInterval(function(){ 
    console.log('Hello World'); 
    }, 1000); 
} 

$('#button').on('click', function(){ 
    clearInterval(interval); 
}); 

var interval = consoleTest(); 
+0

うわー!別の大きな説明、感謝ロリー。 – Ron

関連する問題