時計は、経過時間後に再帰的に自分自身を呼び出しています。
JS でリアルタイムクロックを作ることは不可能です。JS エンジンがどのように機能するかによりTimer
、無限の期間実行するためにループに入れた場合、画面に時間の更新が表示されることはありません (変更は関数が終了して終了するまでウィンドウに描画されないため)。プログラムのギャップ)。また、その無限ループ内では、JS は一度に 1 つのことしか実行できないため、ページで他のことを行うことはできません (ページを閉じることもできません)。このループで完了.......
それがそのためのものsetTimeout
です。
Timer
時計として機能する機能です。関数の内部では、Timer
すべての作業が完了すると、setTimeout
1 秒 (1000 ミリ秒) 待ってから という関数を呼び出すように指示されていますTimer
。
Timer
たまたま同じ機能です。でもsetTimeout
、それはわからないし、気にしない。
このt
場合の はほとんど役に立ちません。 setTimeout
診療所で番号を取るのと同じように、番号を返します。やり直す前に取り消すことにした場合は、呼び出すことができ、clearTimeout(t);
その呼び出しをスキップします (この場合、クロックの呼び出しを停止します)。
ここにはいくつかの悪い慣行がありますが、それらについて言及する必要があるので、自分の実践でそれらを真似しないようにしてください。
最初:setTimeout
文字列ではなく、関数への参照を渡します...
var runThisFunction = function () { console.log("It's the future!"); },
time_to_wait = 250;
// DON'T DO THIS
setTimeout( "runThisFunction()", 250 );
// DO THIS
setTimeout( runThisFunction, 250 );
違いは、setTimeout
その文字列が を通過するeval
ことです。これは、何をしようとしているのかによっては、セキュリティ上の大きな問題になる可能性があります。
2 番目の問題は、ランダムなグローバル変数の設定t
です... ...そして、それを解決策として使用したいと考えています。まず、数年以内に、JS エンジンは、そのようなことをしている人々に対して怒鳴り始めるでしょう。2 つ目は、そのページのアプリの任意の部分が を上書きt
したり、スクリプトの別の場所に依存している可能性があるため、これは大きな穴t
です。ただし、1000 ミリ秒ごとに新しい番号で上書きされます。
代わりに、おそらくTimer.start();
and Timer.stop();
setup を使用する必要がありました。