実はJavaScriptでは「関数」も「値」です。そんな「犬も実は人間です」みたいな話をいきなり受け入れられないかもしれませんが、関数は値です。難しくいうとJavaScriptにおいて関数は第1級オブジェクト(ファーストクラスオブジェクト)です。第1級オブジェクトというのは数値や文字列のような、変数に割り当てられたり、なんらかの計算処理ができたりといった、プログラミングの基本機能が使える対象のことを指します。JavaScriptでは変数に関数を突っ込めるので、関数は第1級オブジェクトです。関数を値として扱うには後ろのカッコをつけずに書きます。2)とかじゃなくて、単にaddと書きます。これを使えば、新しく作った関数だけでなく、すでに定義済みの関数でも遊べます。どっちも2逆にいうと、後ろのカッコがあると関数の中の処理の呼び出しになります。カッコがあれば処理として、カッコがなければ値として、使い分けができます。これはカッコがないので関数自体が入るカッコ無しの場合、関数は実行されません。カッコには「関数を実行する」の意味があるので、無いと何も起こりません。function(関数じゃないよ)」と怒られます。関数じゃないよって怒られるということは、カッコは関数の呼び出しをしていることの証明にもなりますね。こんな風に、JavaScriptでは関数を「値」としていろんなところに引きずり回したり、勝手に別名をつけたりできます。そんなことを聞いたらちょっと悪さをしたくなりますね。先ほどの関数addを思い出してください。addは値を受け取り、計算結果を返します。関数は「値」を受け取れますからね。ひとつ思い出してほしいのですが、関数は「値」です。いうことができます:関数に関数を渡せるええぇ......。あいさつを2回実行するdoTwice(hello);関数doTwiceは受け取った関数を2回実行するだけの関数です。引数funcに関数が入ります。このdoTwiceに「Hello!」と表示するだけの関数を渡します。渡すときはhelloのカッコを外すのを忘れずに!doTwice自体は関数として実行するのでカッコが必要です。すると2回実行され、「Hello!」が2回表示されます。このような、「関数を受け取る関数」を「高階関数」と呼びます。渡す関数にいちいち名前をつける必要はなく、functionほにゃららって記述を直接渡せます。数値とかを変数に入れずに「1」とか「2」で関数に渡せるのと同じですね。console.log('Hello!');});何か見たことのある形です。真相に近づいてきた気がしますね。加えて、変数に入った関数にも値を渡して実行できます。さっきのaddFuncとかで、もうやりましたけども。here!!!」を渡して実行します。この関数に引数messageをひとつ取る関数を渡します。here!!!」が入って実行されます。here!!!」が続けて表示されます。「関数を受け取る関数」と「引数をとる関数」のペア、かなり大事なので覚えておきましょう。コールバック関数そろそろ本題に戻りましょうか。コールバック関数についてです。コールバック関数ですが、広い定義でいうと、単なる「高階関数に渡すための関数」です。さっきのhelloとかfunction(message)とかはコールバック関数になりますね。