1

ここにいくつかのサンプルコードへのリンクがあります。

http://jsfiddle.net/4djNt/2/

テストを開始するまで、aの戻り値はsetTimeout()ある種のブラウザオブジェクトであると想定していました。

実際、それは単純な整数のようです。また、の戻り値をグローバル変数に割り当てると、そのsetTimeoutようなオブジェクトは1つしか存在できないことを意味すると思いました。ただし、[タイマーの開始]ボタンを複数クリックするとわかるように、複数のタイマーが同時に実行されている可能性があります。

例えば

  • スタートボタンをクリックします
  • スクリプトはタイムアウトを作成します
  • それはtimeout 1、5秒で発砲するためです
  • 1秒後、もう一度クリックすると、timeout 2
  • 今、私は4秒と5秒でtimeout 1火事になりましたtimeout 2
  • 停止ボタンをクリックすると、timeout 2クリアされるだけです

複数のタイマーを作成するユーザークリックの問題は、設定する前に常に現在のタイムアウト変数をクリアすることで解決できます。しかし、私はJavascriptが実際にここで何をしているのかを本当に理解したいと思います。

4

3 に答える 3

5

setTimeout数値をsetInterval返します。番号はidタイマーのです。clearTimeoutアクティブなタイマーは、とをそれぞれ使用して停止できますclearInterval

タイマーのIDを紛失した場合は、もう一度推測するか、タイマーが完了するのを待つ必要があります(タイムアウトであると想定)。

パラメータで指定されたミリ秒数でタイマーがキャンセルされなかった場合、タイマーはdelayグローバルコンテキストでコールバック関数を実行します。

于 2012-10-26T02:15:58.333 に答える
2

の戻り値をsetTimeoutに渡してclearTimeout、スケジュールされたタスクが実行されないようにすることができます。変数が設定されていて、ボタンがもう一度押された場合は、clearTimeout最初に実行setTimeoutしてから、2回目のプッシュのみをスケジュールすることを想定しています。

于 2012-10-26T02:14:53.200 に答える