質問: setInterval(() => { Position(Math.random()); }, speed); ``` またコールバック関数とこんがらがるのですが、こちらは引数に使った関数はコールバック関数なのではなく関数に渡される関数のことをコールバック関数というのでしょうか? 違いが微妙です。
回答: 高階関数とは関数を引数として与えたり返したりできる関数のことです。 つまり関数を扱える関数のことです。 引数の関数(それもまた高階関数であるかもしれませんが)のことではありません。 コールバック関数とは渡される関数の目的からそのように呼ばれます。 例えば、 サーバーからデータを要求しその受け取ったデータで画面描画するとします。 ``` data = loaddata(); draw(data); ``` このようにすると、 いつ終わるかわからない`loaddata()`の終了を待たなければなりません。 そこで、 ``` loaddata(draw); ``` のように関数を渡して置いて 読込が終了した時点で`loaddata`自体に`draw(data);`を実行してもらうようにします。 言わば、電話番号を渡しておいて仕事が終わったら電話してね、そしたら私はそれから私の仕事をするよ。 という感じです。 多分、こういうことを称してコールバックと言っていると思います。 別の例として 2つの引数をとり足し算をする関数`add`と 2つの引数をとり引き算をする関数`sub`が あって、 2つの引数と渡された関数を適用して計算をする`calc`が `calc(x, y, add);` のように呼び出される場合 `calc`のやることは`add(x,y)`のような呼び出しですが、 このような場合は`add`はコールバック関数とは呼ばれない(と思います)。 なので、渡す関数の目的によってそのように呼ばれるということになります。