この行:
var t = setTimeout(startTime, 500);
は、500ミリ秒の遅延の後に、startTime
関数が呼び出されるべきであることを意味します。このコードはstartTime
の内部にあるので、関数は再帰的になります。 t
変数には、タイマーの特定のインスタンスを表す数値が入力されます。これは、あなたがclearTimeout()
機能を使用して、タイマーをキャンセルしたい場合...あなたはこのように、キャンセルしたいタイマーへの参照を渡すだろう、後で使用することができます。
clearTimeout(t);
は、このを見てみましょうちなみにhttps://jsfiddle.net/34s2g1f4/6/
、はるかに単純化されたクロックコードは次のようになります:
window.addEventListener("DOMContentLoaded", function(){
var timeLink = document.getElementById('timeLink');
var t = null;
// The parenthesis around this function make it a function
// expression and the extra set of parenthesis at the end
// cause the function to invoke itself. This syntax is also
// known as an "Immediately Invoked Function Expression"
(function startTime() {
timeLink.innerHTML = "Time: " + new Date().toLocaleTimeString();
t = setTimeout(startTime, 900);
}());
});
このコードは、すべての900ミリ秒の時間を更新し、のではなく、すべての500ミリ秒setTimeout()
によって返された実際の値を参照するにはフィドルonds(したがって、それは自分自身を半分近くの頻度で呼び出しますが、それでも時間は正確です)。
setTimeout()
機能は、「1回限り」のタイマーを作成します。タイマーがオフになった後、供給関数の参照が呼び出されると、それはそれの終わりですが、タイマーがオフになる最初の時間の後に、それは再び現在の関数を呼び出すように、あなたのケースで供給される関数のリファレンスは、setTimeout()
が含まれている機能です別の「ワンタイム」タイマーが設定されるなどの問題があります。ある関数がそれ自身を呼び出すとき、それは「再帰関数」と呼ばれます。
、ユーザーが指定する間隔で繰り返しその機能を呼び出す繰り返しタイマーを作成setInterval()
を、使用することです。この動作を取得する別の方法。それは次のようになります。
window.addEventListener("DOMContentLoaded", function(){
var timeLink = document.getElementById('timeLink');
// Here, the call to start the timer is outside of the function
// so startTime will not be recursive, it will just be called
// repeatedly every 9/10's of a second.
var t = setInterval(startTime, 900);
});
function startTime() {
timeLink.innerHTML = "Time: " + new Date().toLocaleTimeString();
}
受け入れ答えが言うにもかかわらず(それはほとんどが間違っている)、setTimeout()
とsetInterval()
は標準化され、いくつかの時間のためにしています。 From:
't内のコードは、呼び出されないと呼び出されます。' 'startTime()'は呼び出されていません。 –
おそらく、あなたが '' innerHTML''を設定したいのであれば '' innerHTML''ではなく '' innerText''を設定したいと思うでしょう。 '' innerHTML''を設定するには、 '' document.getElementById ( 'timeLink')。innerHTML = "
hi
" "。 – Ismail@hamism '.innerText'は標準ではないため、すべてのブラウザで動作するわけではありません。 '.innerHTML'は、文字列に(その名前にもかかわらず)HTMLを必要としません。 –