JavaScriptでループ処理に遅延を追加する方法をわかりやすく解説
JavaScriptでループの各反復の間に遅延(待ち時間)を設けたい場合は、setTimeout() メソッドを使用します。この記事では、基本的な実装例から、より読みやすいモダンな書き方まで、コード例とともに解説します。
setTimeout()でループに遅延を追加する仕組み
setTimeout() は、指定したミリ秒後にコールバック関数を一度だけ実行するメソッドです。ループ内で単に setTimeout(fn, 2000) と書くだけでは、すべてのタイマーがほぼ同時に登録されてしまい、意図した通りの遅延になりません。
そこでポイントとなるのが、遅延時間にループカウンタを掛け算するという手法です。こうすることで、各反復に段階的な遅延を持たせることができます。
コード例
以下は、「START」ボタンをクリックすると、2秒間隔で i の値が順番に表示されるサンプルです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ループに遅延を追加する</title>
<style>
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
.result {
font-size: 18px;
font-weight: 500;
color: blueviolet;
}
</style>
</head>
<body>
<h1>JavaScriptでループに遅延を追加する</h1>
<div class="result"></div>
<button class="Btn">START</button>
<h3>上のボタンをクリックするとループが開始されます</h3>
<script>
let BtnEle = document.querySelector(".Btn");
let resEle = document.querySelector(".result");
BtnEle.addEventListener("click", () => {
for (let i = 0; i < 10; i++) {
setTimeout(function () {
resEle.innerHTML += "i = " + i + "<br>";
}, 2000 * i);
}
});
</script>
</body>
</html>
実行結果
「START」ボタンをクリックすると、各反復の後に遅延が発生しながら、i の値が2秒ごとに順番に画面へ追加されていきます。

ボタンをクリックして数秒後、遅延しながら結果が順次表示されている様子:

補足:async/awaitを使ったモダンな書き方
より直感的で読みやすいコードにしたい場合は、Promise と async/await を組み合わせる方法もおすすめです。
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
async function runLoop() {
const resEle = document.querySelector(".result");
for (let i = 0; i < 10; i++) {
resEle.innerHTML += "i = " + i + "<br>";
await sleep(2000); // 2秒待機してから次の反復へ
}
}
document.querySelector(".Btn").addEventListener("click", runLoop);
この方法では、各反復が完了するのを待ってから次の反復に進むため、処理の流れが上から下へと自然に読めます。特に、反復ごとに非同期処理(APIリクエストなど)を含む場合には、こちらのアプローチが便利です。
まとめ
- ループに遅延を追加する基本は setTimeout() と、遅延時間へのカウンタの掛け算。
- 可読性を重視するなら async/await + Promise の組み合わせが有効。
- 用途やコードの規模に応じて、最適な方法を選択しましょう。
-
JavaScriptのコンストラクターにプロパティやメソッドを追加する方法
JavaScriptでは、コンストラクター関数に対してprototype(プロトタイプ)を利用することで、後からプロパティやメソッドを追加することができます。この方法で追加したプロパティやメソッドは、そのコンストラクターから生成されたすべてのインスタンスで共有されるため、メモリの面でも効率的です。 サンプルコード 以下は、JavaScriptのコンストラクターにプロパティとメソッドを追加するコード例です。 <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8 /> <meta n
-
JavaScriptで非同期ループを実装する方法をわかりやすく解説
JavaScriptでは、async/awaitとPromiseを組み合わせることで、各処理の完了を待ちながら繰り返しを実行する「非同期ループ」を実装できます。通常のループ内で時間のかかる処理(API通信やタイマー処理など)を順番に実行したい場合に非常に便利です。以下は、JavaScriptで非同期ループを実装するコード例です。コード例<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="vi