

高階関数とは下記のPosition(Math.random());のように、関数の引数に関数を使った場合、  
引数の関数を一般の関数と区別するために高階関数というのでしょうか？

[code]

    let Position = (mathRandom) => {
        targetItem.style.top = (mathRandom * 100) + '%';
    };
    
    let setClickItem1 = setInterval(() => {
        Position(Math.random());
    }, speed);
    
[/code]

またコールバック関数とこんがらがるのですが、こちらは引数に使った関数はコールバック関数なのではなく関数に渡される関数のことをコールバック関数というのでしょうか？  
違いが微妙です。


CC BY-SA 3.0
2017-05-04T07:22:26.543
34454
2017-05-04T07:59:26.133
20834
question
javascript
高階関数とコールバック関数とは？


高階関数とは関数を引数として与えたり返したりできる関数のことです。  
つまり関数を扱える関数のことです。  
引数の関数（それもまた高階関数であるかもしれませんが）のことではありません。

コールバック関数とは渡される関数の目的からそのように呼ばれます。  
例えば、  
サーバーからデータを要求しその受け取ったデータで画面描画するとします。

[code]

    data = loaddata();
    draw(data);
    
[/code]

このようにすると、  
いつ終わるかわからない`loaddata()`の終了を待たなければなりません。  
そこで、

[code]

    loaddata(draw);
    
[/code]

のように関数を渡して置いて  
読込が終了した時点で`loaddata`自体に`draw(data);`を実行してもらうようにします。

言わば、電話番号を渡しておいて仕事が終わったら電話してね、そしたら私はそれから私の仕事をするよ。  
という感じです。  
多分、こういうことを称してコールバックと言っていると思います。

別の例として  
２つの引数をとり足し算をする関数`add`と  
２つの引数をとり引き算をする関数`sub`が  
あって、  
２つの引数と渡された関数を適用して計算をする`calc`が  
`calc(x, y, add);` のように呼び出される場合  
`calc`のやることは`add(x,y)`のような呼び出しですが、  
このような場合は`add`はコールバック関数とは呼ばれない（と思います）。

なので、渡す関数の目的によってそのように呼ばれるということになります。


CC BY-SA 3.0
2017-05-04T07:48:26.843
34456
2017-05-04T07:59:26.133
2017-05-04T07:59:26.133
5044
5044
34454
answer