2017-08-28 3 views
-4

練習の一環として、2秒ごとに1つのクロックを「刻む」「バイナリクロック」を表示する簡単な関数を書きました。私が書いた関数は、実際にはHTML形式(フォーム内の値は何度も変更される)でそれを行う同様のコードの変更です。JavascriptのsetTimeout関数がsetIntervalのように動作するのはなぜですか?

は、ここに私のJS-のみの変更です:

function binaryClock() {       
    let currentTime = new Date(); 
    let hr = currentTime.getHours(); 
    let mn = currentTime.getMinutes(); 
    let sc = currentTime.getSeconds(); 

    setTimeout('binaryClock()', 2000); 
    document.body.innerHTML = ''; 
    document.write(hr + ':' + mn + ':' + sc + ' '); 
} 

binaryClock(); 

任意のクロックは、バイナリ時計のコールバックでのsetIntervalなどのsetTimeout行為という意味では同じように、それは実際に、intervallicを働くのはなぜ?

代わりにsetInterval()を使用した場合、私は全く同じ結果を得ています。初心者の方でも、なぜこの特定のケースで、なぜ通常は1回実行されるのかを説明する十分な知識がありませんこの場合はsetInterval()のようになり、私の研究でこのような違いが出てくることはありませんでしたので、ここでそれを聞くことが重要です。

+5

「binaryClock」を呼び出すたびに、 'Timeout'が' set'されて 'binaryClock'が呼び出されます。 ... 'set'は' binaryClock'を呼び出す 'Timeout'です。 ... 'set'は' binaryClock'を呼び出す 'Timeout'です。 ... 'set'は' binaryClock'を呼び出す 'Timeout'です。 ... 'set'は' binaryClock'を呼び出す 'Timeout'を返します... – deceze

+0

私は今度はrecurisivnessを理解しており、自分自身への呼び出しを含む関数を見るとこの動作を再帰的に呼びます。 – sangoko

答えて

-1

decezeさんからコメントをいただいたおかげで、私は元のコードで再帰の実装を逃したと思います。私は今関数が実行されるたびに、setTimeout()またはsetInterval内の呼び出しを介して関数自身を呼び出していることを理解しています。

各ティックで呼び出されますが、関数は再帰的に言語が一般的に解釈される方法によるどちらの方法でも。

したがって、いずれかの方法で再帰性からsetInterval()のような動作が実現されます。

1

各ティックでsetTimeout(binaryClick、2000)を実行しているので、setIntervalのように機能します。

ので、基本的には、毎回あなたの時計は、それが次の目盛りに

3

を開始し、「ダニ」「私のJavascriptのsetTimeout関数がしたsetIntervalと同じように動作しないのはなぜ?」

あなたはそれをそのようにしたからです。関数binaryClock()を再帰的に呼び出しています。

関連する問題