では先ほど作成した「エレメント操作15問」のうち、上級問題の例を使ってステップ実行(変数・エレメント状態の逐次追跡) を作ります。
ここでは 問題15(ボタン動的生成+クリックイベント) を対象にします。
問題15ステップ実行:5個のボタンを生成しクリックイベントを追加
let container = document.getElementById("container");
for (let i = 1; i <= 5; i++) {
let btn = document.createElement("button");
btn.textContent = `ボタン${i}`;
btn.addEventListener("click", () => {
alert(`ボタン${i}が押された`);
});
container.appendChild(btn);
}
JavaScriptステップ実行(逐次追跡)
| i | btn.textContent | container.innerHTML (前→後) | イベント登録 | 実行内容 |
|---|---|---|---|---|
| 1 | ボタン1 | “” → “ボタン1” | クリック → alert(“ボタン1が押された”) | ボタン1生成、追加、イベント設定 |
| 2 | ボタン2 | “ボタン1” → “ボタン1ボタン2” | クリック → alert(“ボタン2が押された”) | ボタン2生成、追加、イベント設定 |
| 3 | ボタン3 | 前→”ボタン1ボタン2ボタン3″ | クリック → alert(“ボタン3が押された”) | ボタン3生成、追加、イベント設定 |
| 4 | ボタン4 | 前→”…ボタン4″ | クリック → alert(“ボタン4が押された”) | ボタン4生成、追加、イベント設定 |
| 5 | ボタン5 | 前→”…ボタン5″ | クリック → alert(“ボタン5が押された”) | ボタン5生成、追加、イベント設定 |
解説ポイント
- ループでの動的生成
i = 1~5までループしてボタン作成document.createElement("button")で要素を生成textContentでボタン名を設定
- イベントの逐次登録
addEventListenerでクリックイベント追加- アロー関数と
let iにより各ボタンで正しい番号が保持される(クロージャ)
- DOM更新の逐次確認
container.innerHTMLの変化で追加順を追える- イベント登録前後で DOM に追加されるタイミングも明確
- 実務応用例
- リストやカードを動的生成してイベント付与(Todoアプリ、商品一覧など)
- クロージャを使うことでループ内で固有の状態を保持
💡 拡張ステップ表案
- 「クリックされたら alert 表示」という動作も逐次追跡可能
- 各ボタンごとに DOM状態・イベント状態・変数i の値をテーブル化してデバッグ可


