JavaScriptを学習していて、次の演習とちょっと混乱しました。ソート方法として別の機能を受け入れるフィルタを作成しなければならなかった。私がちょっと理解できないことは、for loop
がvalue
を正確にx
に渡すことです。説明していただけますか?外部関数(配列)からのリターン関数(x)の理解
function filter(arr, func) {
var result = [];
for (var i = 0; i < arr.length; i++) {
var value = arr[i];
if (func(value)) {
result.push(value);
}
}
return result
}
function inBetween(a, b) {
return function(x) {
return a <= x && x <= b;
}
}
function inArray(arr) {
return function(x) {
console.log(x)
return arr.indexOf(x) != -1;
}
}
var arr = [1, 2, 3, 4, 5, 6, 7];
alert(filter(arr, function(a) {
return a % 2 == 0
})); // 2,4,6
alert(filter(arr, inBetween(3, 6))); // 3,4,5,6
alert(filter(arr, inArray([1, 2, 10]))); // 1,2
'if(func(value))'では、値が関数に渡されます。 'func(value)'は関数呼び出しです。しかし、それが何を求めているのかははっきりしていません。 – Pointy
@Pointy私は、例えばinBetween(a、b)のようなプリセット属性を持つ関数を渡すのは混乱していますが、同時にforループではfunc(value)ですので、インナーリターン関数に行きます。 – Adrian
@Trincotには以下の説明があります。 'inArray'や' inBetween'のように関数が別の関数を返すとき、返された関数はそれが作られたコンテキストを "覚えている"。これは単なる普通の関数ですが、 'arr'パラメータのように、作成された環境からのものへのアクセスを保持します。そうでなければ、それは他のどの機能とも変わりません。 – Pointy