跳到主要内容

JS 高阶函数

高阶函数是 接受函数作为参数或返回一个函数 的函数。JavaScript 中的高阶函数非常常见,常用于回调、函数组合、柯里化等。


回调函数(Callback)

回调函数是作为参数传递给另一个函数的函数,通常用于异步或可复用逻辑。

js
function greet(name, callback) {
console.log(`Hello, ${name}!`);
callback();
}

function sayBye() {
console.log("Goodbye!");
}

greet("Alice", sayBye);
// 输出:
// Hello, Alice!
// Goodbye!
  • sayBye 是回调函数
  • 回调可以在函数内部执行任意逻辑

常见回调场景:数组方法

js
const numbers = [1, 2, 3, 4];
const squares = numbers.map(n => n * n);
console.log(squares); // [1, 4, 9, 16]
  • map 的参数就是回调函数

柯里化(Currying)

柯里化是将一个多参数函数 转换为多个单参数函数 的技术。

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

const double = multiply(2);
console.log(double(5)); // 10
  • 可以简化函数复用
  • 支持链式调用和部分应用

箭头函数写法:

js
const multiply = a => b => a * b;
console.log(multiply(3)(4)); // 12

函数组合(Compose)

函数组合是把多个函数组合成一个函数,按顺序执行。

js
const add2 = x => x + 2;
const multiply3 = x => x * 3;

const compose = (f, g) => x => f(g(x));

const result = compose(add2, multiply3)(5);
console.log(result); // 17 => add2(multiply3(5)) = add2(15) = 17
  • compose(f, g) 表示先执行 g 再执行 f
  • 可扩展为多函数组合
js
const composeMany = (...fns) => x => fns.reduceRight((v, f) => f(v), x);

高阶函数特点总结

  • 接受函数作为参数
  • 或返回一个函数
  • 常用于:回调、柯里化、函数组合、事件处理、数组操作等
  • 提升代码复用性和可组合性