2012-03-08 6 views
2

トリガーからsetTimeout関数を開始した場合、ページがリロードされると関数は停止しますか?ページを再読み込みすると、JavaScriptのsetTimeout関数が停止しますか?

私のページのonloadイベントでsetTimeout関数 "periodic_update()"を開始します。

これは、periodic_update()関数プロセスの複数のインスタンスを作成していますか?

<body onload="init_page_onload()"> 

function init_page_onload() { 
    periodic_update();  
} 

function periodic_update() { 
     foo() 

    setTimeout("periodic_update()", PERIODIC_UPDATE_REPEAT_PERIOD_MS) 
} 
+3

実際、文字列ではなく 'setTimeout'に関数を渡すことがベストプラクティスです。代わりに 'setTimeout(periodic_update、PERIODIC_UPDATE_REPEAT_PERIOD_MS)'を使用してください。 – Matt

答えて

4

ページがリロードされると、「以前の」タイマーは破棄され、新しいものが開始されます。

3

ブラウザでは、ページを終了するとすべてのJavaScriptコードが中止され、ページを開くと実行されます。タイムアウトはクリアされ、ページをリロードすると再び設定されます。

あなたがタイムアウトを持続したい場合は、可能性:

  • を追跡するために、(あなたは、クライアントのコンピュータ上のデータを永続化することを可能にする)localStorageを使用してリロードしない親フレームを使用関数が最後に呼び出され、ブラウザ、HTML、CSSおよびJavaScriptがDOMを構築し、樹木のレンダリングの一部として再評価されているリロードすると、負荷
0

に適切なタイムアウトを設定したときの。したがって、タイマ機能の各インスタンスは、ページリロードに配置されます。だから、あなたはその関数の複数のインスタンスで終わることはありません。

関連する問題