跳到主要内容

Eureka 高阶函数

高阶函数是函数式编程中的核心概念之一。在 Eureka 函数式编程中,高阶函数是指那些可以接受函数作为参数,或者返回一个函数作为结果的函数。通过高阶函数,我们可以编写更加灵活和可重用的代码。

什么是高阶函数?

高阶函数是指满足以下条件之一的函数:

  1. 接受一个或多个函数作为参数。
  2. 返回一个函数作为结果。

高阶函数使得我们可以将函数作为数据进行操作,从而在编程中实现更高层次的抽象。

示例:接受函数作为参数

以下是一个简单的例子,展示了如何定义一个接受函数作为参数的高阶函数:

function applyOperation(x, y, operation) {
return operation(x, y);
}

function add(a, b) {
return a + b;
}

function multiply(a, b) {
return a * b;
}

console.log(applyOperation(2, 3, add)); // 输出: 5
console.log(applyOperation(2, 3, multiply)); // 输出: 6

在这个例子中,applyOperation 是一个高阶函数,它接受两个数字和一个函数 operation 作为参数,并返回 operation 的结果。

示例:返回函数作为结果

以下是一个返回函数的高阶函数示例:

function createMultiplier(multiplier) {
return function(x) {
return x * multiplier;
};
}

const double = createMultiplier(2);
const triple = createMultiplier(3);

console.log(double(5)); // 输出: 10
console.log(triple(5)); // 输出: 15

在这个例子中,createMultiplier 是一个高阶函数,它返回一个新的函数,该函数将输入值乘以指定的倍数。

高阶函数的实际应用

高阶函数在实际开发中有许多应用场景,以下是一些常见的例子:

1. 数组操作

在 JavaScript 中,数组的 mapfilterreduce 方法都是高阶函数的典型应用。

const numbers = [1, 2, 3, 4, 5];

const doubled = numbers.map(x => x * 2);
console.log(doubled); // 输出: [2, 4, 6, 8, 10]

const evens = numbers.filter(x => x % 2 === 0);
console.log(evens); // 输出: [2, 4]

const sum = numbers.reduce((acc, x) => acc + x, 0);
console.log(sum); // 输出: 15

2. 回调函数

在异步编程中,高阶函数常用于处理回调函数。例如,setTimeoutsetInterval 都接受一个函数作为参数。

setTimeout(() => {
console.log("Hello after 2 seconds!");
}, 2000);

3. 函数组合

高阶函数可以用于组合多个函数,创建一个新的函数。例如:

function compose(f, g) {
return function(x) {
return f(g(x));
};
}

function addOne(x) {
return x + 1;
}

function square(x) {
return x * x;
}

const addOneThenSquare = compose(square, addOne);

console.log(addOneThenSquare(2)); // 输出: 9

总结

高阶函数是函数式编程中非常重要的概念,它们使得代码更加灵活和可重用。通过接受函数作为参数或返回函数作为结果,高阶函数可以帮助我们实现更高层次的抽象和组合。

提示

尝试自己编写一些高阶函数,例如一个接受函数作为参数并返回一个新函数的函数,或者一个用于处理数组的高阶函数。

附加资源

练习

  1. 编写一个高阶函数 repeat,它接受一个函数 f 和一个数字 n,并返回一个新的函数,该函数将 f 重复调用 n 次。
  2. 使用高阶函数 mapfilter 来处理一个数组,找出所有大于 10 的数字并将它们加倍。