JSわからないマンです.適当なこと言います.
forEachの中に「function」という変数があります。
このfunction
はlet
やver
同様,変数ではなく予約語のカテゴリになります.
ここでarray
という変数を宣言するためにlet
を用いることと同様,
コールバック関数
を宣言するためにfunction
を用いています.
この「function」というのは関数の一種だそうですが一体どんな関数なのでしょうか?
※ネットで調べて「function」はコールバック関数と呼ばれているということはわかりました。
では,比較対象として普通?に関数を書いてみたいと思います.
上記コードの関数にshow_template
という名前を与えて以下のように書いてみます.
他の書き方
<!DOCTYPE html>
<html>
<head>
<title>JavaScript Sample</title>
</head>
<body>
<script>
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
function show_template(element) {
document.write("配列の" + element + "番目を表示");
document.write("<br />");
}
array.forEach(show_template); //コールバック関数として使う
show_template(999); //普通?に使う
</script>
</body>
</html>
具体的には,array
の中身 全て(forEach
)に対して関数show_template
を適用する.という風に書き直しています.
ここで,array.forEach(show_template);
の下にshow_template(999);
だけを記述すると,html上に配列の999番目を表示
という文字が追加されます.
関数に名前を与えて,いつでも呼び出すことができるようにしたため,このような動作を実現することができます.
元々のコードで使われていた書き方では名前を与えず,array.forEach
だけに関数を渡していたものでしたが,関数として名前を与えることで何度でも使うことができるようになりました.
この書き方をする目的は,1度しか使われないような関数は無名のまま使用することで,コード内に名前を与えられた大量の関数が存在してしまうことを防ぐためにあります.
「コールバック関数」とは,他の関数(今回で言えばforEach
)に渡す関数のことを指します.しかし,function
が予約語であることを体感してもらいたく,名前show_template
を与えてコールバック関数として使った場合と,普通に呼び出した場合を示してみました.