Increments a number on each click and updates the DOM.
ボタンをクリックするたびに数値を1ずつ増やし、変数への代入とDOM更新の流れを確認します。
+= 1 で加算できるaddEventListener でクリック時に処理を実行できるtextContent で画面の数値を更新できる現在のカウント:
0
JavaScript
const countBtn = document.querySelector('#countBtn');
const countValue = document.querySelector('#countValue');
let count = 0;
countBtn.addEventListener('click', () => {
count += 1;
countValue.textContent = String(count);
});
HTML
<div class="counter-box">
<p>現在のカウント:</p>
<p class="counter-value" id="countValue">0</p>
<button type="button" class="counter-btn" id="countBtn">+1</button>
</div>
CSS
.counter-box {
display: grid;
gap: 12px;
padding: 16px;
border-radius: 12px;
background: rgba(0,0,0,.05);
max-width: 320px;
}
.counter-btn {
padding: 10px 14px;
border-radius: 10px;
border: 1px solid rgba(0,0,0,.2);
background: #fff;
cursor: pointer;
}
.counter-value {
font-size: 1.4rem;
font-weight: bold;
}
querySelector)addEventListener)textContent で表示を書き換えるlet count = 0;const ではなく let を使います。count += 1;count = count + 1; と同じ意味です。textContentString(count) とすると安全です。const count = 0; にして再代入でエラーcountValue = count; と書いてしまう(DOMは変わらない)addEventListener('click', handler()) として即実行してしまうaddEventListener('click', handler()) を「即実行してしまう」問題は、イベントに“関数そのもの”を渡すべきところに、関数の“実行結果”を渡してしまうのが原因です。
handler …… 関数そのもの(後で呼べる)handler() …… 今この場で実行した結果(戻り値)addEventListener が欲しいのは 「後で呼ぶための関数」 なので、handler() と書くとズレます。
JavaScript
const handler = () => {
console.log('clicked');
};
button.addEventListener('click', handler()); // ❌
handler() が その場で実行される(クリックしてないのにログが出る)handler() の戻り値は undefined(多くの関数は戻り値なし)addEventListener('click', undefined) のようになり、クリック時に呼ぶものがないJavaScript
const handler = () => {
console.log('clicked');
};
button.addEventListener('click', handler); // ✅
これで クリックされた瞬間に handler が呼ばれる、期待通りの挙動になります。
「handler に引数を渡したいから handler(10) と書きたい」→ そのまま書くと即実行です。
JavaScript
const handler = (step) => {
console.log(step);
};
button.addEventListener('click', () => handler(10)); // ✅ クリック時に実行
() => ... が「クリック時に呼ばれる関数」handler(10) を実行するaddEventListener('click', handler) ✅(関数参照)addEventListener('click', handler()) ❌(実行してしまう)() => handler(x) ✅let+= は加算代入演算子textContent