我正在学习 JavaScript,并对以下练习感到有点困惑。我确实必须创建一个过滤器来接受另一个函数作为排序方法。我有点无法理解的是 for 循环
到底是如何将 value
传递给 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
最佳答案
我以这一行为例:
filter(arr, inArray([1, 2, 10])) );
inArray 通过 arr = [1, 2, 10]
调用。
对于特定的arr,它返回以下(匿名)函数:
function (x) {
return arr.indexOf(x) != -1;
}
所以原来的行现在可以描绘为:
filter(arr, function (x) {
return [1, 2, 10].indexOf(x) != -1;
});
现在filter被调用,func设置为该匿名函数。以下代码调用该函数:
if (func(value)) {
result.push(value);
}
所以当这个func被调用时,这实际上意味着上面的匿名函数被调用,并且参数x被设置为value通话的那一刻。就像任何其他函数调用一样,函数的参数获取实际调用中参数的值。
关于javascript - 理解外部函数(数组)的返回函数(x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664970/