イベント
値としての関数
JavaScriptでは、関数も値の一種です。したがって、他の値と同じように、変数に代入したり、関数の引数や戻り値として使用したりすることができます。
function greet() {
document.write("Hello World");
}
const func = greet;
func();
上の例では、const func = greet;
の行で変数func
に関数greet
を代入しています。関数を値として扱うときは、関数呼び出し式の括弧は使用しません。これにより、関数が代入された変数を経由してその関数を実行できます。
イベントハンドラ
オブジェクトのプロパティとして関数を利用することもできます。document.getElementById
が返すオブジェクトのonclick
プロパティには、要素がクリックされたときに実行される関数を指定できます。
ボタンのクリック、フォームへの入力、ページの読み込みなど、Webページ上で発生するあらゆるアクションを総称してイベントと呼びます。このようなイベントの処理を行うのがイベントハンドラで、onclick
関数はその一例です。
index.html
<button id="greet-button" type="button">クリック</button>
script.js
function clicked() {
document.write("Hello World");
}
const greetButton = document.getElementById("greet-button");
greetButton.onclick = clicked;
この例では、HTML要素のid
属性にgreet-button
が指定されている HTML要素を表すオブジェクトのonclick
プロパティに対し、関数clicked
を代入しています。これにより、ボタンがクリックされたとき、clicked
関数が実行されるようになります。
備考
下のコードは意図したとおりに動作しません。何が間違っているのでしょうか。
function clicked() {
document.write("Hello World");
}
const greetButton = document.getElementById("greet-button");
greetButton.onclick = clicked();
答えは、最後の行がclicked
からclicked()
に変わってしまっていることです。関数は、カッコをつけた式が評価されるタイミングで実行されます。このため、
greetButton.onclick = clicked();
では代入より前、式clicked()