javascript - 理解外部函数(数组)的返回函数(x)

标签 javascript arrays sorting

我正在学习 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/

相关文章:

javascript - 将一个标签的文本替换为另一个标签的文本

arrays - 在 Swift 中将字典类型 append 到数组

arrays - 将CSV文件导入python,然后将其转换为numpy数组,然后将其输入sklearn算法

r - 如何反转R中数据帧的顺序

javascript - 使用 jquery 验证插件时重置表单

javascript - 从 'for of' 循环输出创建一个数组

javascript - 如何切换 backbone.js 的模型属性?

将十进制数的每一位转换为相应的二进制数

java - 如何在java中对队列进行排序?

algorithm - 是否存在按 O(∞) 排列排序的排序算法?