setTimeout
と setInterval
は、JavaScript における時間制御のための重要な関数です。これらの関数を使うことで、特定の時間が経過した後に処理を実行したり、一定間隔で繰り返し処理を実行することができます。この記事では、setTimeout
と setInterval
の仕組みや使用方法、実際の活用例について詳しく解説します。
1. setTimeout
の基本
setTimeout
は、指定した時間(ミリ秒単位)経過後に一度だけ指定した関数を実行するための関数です。この関数は、特定の時間が経過した後に実行したい処理を指定する際に使用されます。

構文
javascriptsetTimeout(関数, 時間);
-
関数:指定した時間後に実行したい関数。
-
時間:実行までの待機時間(ミリ秒単位)。
例
javascriptsetTimeout(function() {
console.log("3秒後に実行されました");
}, 3000);
この例では、3秒後にコンソールに「3秒後に実行されました」というメッセージが表示されます。
戻り値
setTimeout
はタイマーIDを返します。このタイマーIDを使って、後でタイマーをキャンセルすることができます。
javascriptlet timerId = setTimeout(function() {
console.log("これは実行されません");
}, 5000);
// 5秒後にタイマーをキャンセル
clearTimeout(timerId);
clearTimeout
を使うことで、指定したタイマーIDに関連するタイマーをキャンセルできます。
2. setInterval
の基本
setInterval
は、指定した時間間隔で繰り返し処理を実行するための関数です。この関数は、指定した時間間隔で一定の間隔で関数を繰り返し実行する場合に使用します。
構文
javascriptsetInterval(関数, 時間);
-
関数:指定した時間ごとに繰り返し実行したい関数。
-
時間:関数を実行する間隔(ミリ秒単位)。
例
javascriptlet count = 0;
let intervalId = setInterval(function() {
count++;
console.log(count + "回目の実行");
if (count === 5) {
clearInterval(intervalId); // 5回実行した後に停止
}
}, 1000);
このコードでは、1秒ごとに「回目の実行」が表示され、5回目でタイマーが停止します。
戻り値
setInterval
もタイマーIDを返します。このタイマーIDを使って、後で繰り返し処理をキャンセルできます。
javascriptlet intervalId = setInterval(function() {
console.log("このメッセージは繰り返し表示されます");
}, 1000);
// 10秒後に繰り返し処理を停止
setTimeout(function() {
clearInterval(intervalId);
console.log("繰り返し処理を停止しました");
}, 10000);
上記のコードでは、1秒ごとにメッセージが表示され、10秒後に繰り返し処理が停止します。
3. setTimeout
と setInterval
の使い方の違い
setTimeout
と setInterval
はどちらも時間を扱う関数ですが、以下のように異なる用途で使用されます。
-
setTimeout
: 一度だけ実行される遅延処理に使用されます。指定した時間が経過した後に、関数を一度だけ実行します。 -
setInterval
: 繰り返し実行される処理に使用されます。指定した間隔で関数を繰り返し実行します。
4. 実際の活用例
例1: カウントダウンタイマー
setTimeout
を使用して、カウントダウンタイマーを作成することができます。
javascriptlet countdown = 10;
let timer = setInterval(function() {
console.log(countdown);
countdown--;
if (countdown < 0) {
clearInterval(timer);
console.log("タイマー終了!");
}
}, 1000);
このコードは、10から0までカウントダウンし、終了時に「タイマー終了!」と表示します。
例2: フェードイン・フェードアウトのアニメーション
setInterval
を使用して、画像のフェードインやフェードアウトの効果を実装することができます。
javascriptlet opacity = 0;
let fadeIn = setInterval(function() {
opacity += 0.1;
document.getElementById("image").style.opacity = opacity;
if (opacity >= 1) {
clearInterval(fadeIn);
}
}, 100);
このコードは、指定された画像の透明度を0から1まで変化させ、フェードインを実現します。
5. 注意点とベストプラクティス
-
非同期処理:
setTimeout
やsetInterval
の中で実行する処理は非同期的に動作します。これらの関数が実行されるタイミングで、他の処理が実行中の場合、予期しない順序で結果が出ることがあります。この点を考慮して、適切なエラーハンドリングを行うことが重要です。 -
タイマーのクリア:
setInterval
やsetTimeout
を使う際は、適切なタイミングでclearInterval
やclearTimeout
を使用して、不要なタイマーをキャンセルすることが推奨されます。これにより、メモリリークを防ぎ、パフォーマンスの向上が期待できます。 -
ミリ秒単位の精度:
setTimeout
とsetInterval
は、ミリ秒単位で時間を指定しますが、ブラウザや環境によっては正確に指定した時間で処理が実行されないこともあります。特にsetInterval
では、処理が遅延する場合があるため、注意が必要です。
6. 結論
setTimeout
と setInterval
は、時間を制御する強力なツールです。これらを適切に活用することで、インタラクティブなウェブアプリケーションを作成する際に、遅延や繰り返し処理を簡単に管理できます。しかし、これらの関数を使用する際は、非同期の挙動やタイマーのクリアについて注意を払い、効率的にコードを実装することが大切です。