2

Eloquent Javascript (第 6 章)を読んでいると、Javascript の高階関数への参照があります。第 3 章に例が示されていますが、私はまだ概念を完全には理解していないので、もう少し単純化できると思います。Web を検索した後、高次関数の簡潔な例を見つけることができないようです。

概念を説明する Javascript の基本的/単純な高階関数を見たいと思います。

4

1 に答える 1

7

高次関数は、関数型プログラミングの概念です。簡単に言えば、高次関数とは、別の関数をパラメーターとして取る関数です。javascriptには、最近いくつかの高機能が追加されています。

Array.prototype.reduce 
//With this function, we can do some funny things.
function sum(array){
    return array.reduce(function(a, b){ return a + b; }, 0);
}

したがって、上記のサンプルでreduceは、​​高階関数であり、別の関数、サンプルの無名関数をパラメーターとして受け取ります。のサインはreduceこんな感じ

reduce(func, init);
//func is a function takes two parameter and returns some value.
// init is the initial value which would be passed to func
//when calling reduce, some thing happen

//step 1.
[1, 2, 3, 4, 5].reduce(function(a, b){ return a + b }, 0);
//step 2.
[2, 3, 4, 5].reduce(function(a, b){ return a + b}, 0 + 1);
//step 3.
[3, 4, 5].reduce(function(a, b){ return a + b}, 0 + 1 + 2);
//...

ご覧のとおりreduce、配列を反復し、その配列のfuncwithinitと最初の要素を適用してから、結果を にバインドしinitます。

もう 1 つの高階関数は ですfilter

Array.prototype.filter
//As the name indicates, it filter out some unwanted values from an Aarry. It also takes a function, which returns a boolean value, true for keeping this element.
[1, 2, 3, 4, 5].filter(function(ele){ return ele % 2 == 0; });

上記の 2 つの例では、特に高階関数はそれほど理解しにくいと言わざるを得ませんreduce。しかし、それは複雑ではありません。高次関数を使用すると、実際にはコードがよりクリーンで読みやすくなります。例として、filterそれはすべての奇数を捨てることを人々に伝えます。

ここでは、簡単なfilter関数を実装してその方法を示したいと思います。

function filter(array, func){
    var output = [];
    for(var i = 0; i < array.length; i++){
      if(func(array[i])) output.push(array[i]);
    }
    return output;
}
于 2012-08-10T11:42:02.473 に答える