yosaku_ibs
@yosaku_ibs

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

「function」の意味

Q&A

Closed

解決したいこと

forEachの中に「function」という変数があります。
この「function」というのは関数の一種だそうですが一体どんな関数なのでしょうか?
※ネットで調べて「function」はコールバック関数と呼ばれているということはわかりました。

ソースコード

<!DOCTYPE html>
<html>
<head>
    <title>JavaScript Sample</title>
</head>
<body>
    <script>
        let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
        array.forEach(function (element) {
            document.write("配列の" + element + "番目を表示");
            document.write("<br />");
        });
    </script>
</body>
</html>

自分で試したこと

ネットで検索しましたが、解決に繋がる情報に出会えませんでした。。。

以上、お手数ではございますが
もしご存知の方がいらっしゃいましたら
ご教示の程よろしくお願い申し上げます。

0

1Answer

JSわからないマンです.適当なこと言います.

forEachの中に「function」という変数があります。

このfunctionletver同様,変数ではなく予約語のカテゴリになります.

ここで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を与えてコールバック関数として使った場合と,普通に呼び出した場合を示してみました.

1Like

Comments

  1. @yosaku_ibs

    Questioner

    @PondVillege様

    いつも大変お世話になっております。
    ご回答くださりありがとうございます。

    functionが予約語であるということを体感できました!

    コールバック関数と比較する形で、以下の2種類の表現方法で
    ご教示頂けたので深く理解することができました。
    array.forEach(show_template); //コールバック関数として使う
    show_template(999); //普通?に使う

    また、関数を引数として受け取れるという仕組みは素晴らしいなと思いました!

    いつもありがとうございます。

    以上、御礼申し上げます。
  2. 伝わってよかったです!
    これからも頑張ってください!

Your answer might help someone💌