全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-16 8 分钟 ✍️ juanwangdev

JavaScript 高阶函数

高阶函数是指接收函数作为参数或返回函数的函数,是函数式编程的基础。

概念定义

JavaScript
// 接收函数作为参数
[1, 2, 3].map(x => x * 2);

// 返回函数
function multiply(a) {
  return function(b) {
    return a * b;
  };
}

内置高阶函数

数组方法

JavaScript
const arr = [1, 2, 3, 4, 5];

// map: 映射转换
arr.map(x => x * 2);  // [2, 4, 6, 8, 10]

// filter: 过滤
arr.filter(x => x > 2);  // [3, 4, 5]

// reduce: 归约
arr.reduce((sum, x) => sum + x, 0);  // 15

// find: 查找
arr.find(x => x > 3);  // 4

// some/every: 判断
arr.some(x => x > 4);   // true
arr.every(x => x > 0);  // true

sort 与回调

JavaScript
// 排序回调
[3, 1, 2].sort((a, b) => a - b);  // [1, 2, 3]

// 对象排序
const users = [{age: 25}, {age: 18}];
users.sort((a, b) => a.age - b.age);

自定义高阶函数

函数作为参数

JavaScript
function executeWithLog(fn, ...args) {
  console.log('执行前');
  const result = fn(...args);
  console.log('执行后,结果:', result);
  return result;
}

executeWithLog(Math.max, 1, 2, 3);  // 输出日志,返回 3

返回函数

JavaScript
// 工厂函数
function createMultiplier(factor) {
  return function(number) {
    return number * factor;
  };
}

const double = createMultiplier(2);
double(5);  // 10

柯里化

将多参数函数转换为一系列单参数函数:

JavaScript
function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    }
    return function(...moreArgs) {
      return curried.apply(this, args.concat(moreArgs));
    };
  };
}

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

const curriedAdd = curry(add);
curriedAdd(1)(2)(3);  // 6
curriedAdd(1, 2)(3);   // 6

函数组合

JavaScript
// 管道组合
const pipe = (...fns) => x => fns.reduce((v, fn) => fn(v), x);

// 组合
const compose = (...fns) => x => fns.reduceRight((v, fn) => fn(v), x);

// 使用示例
const double = x => x * 2;
const addOne = x => x + 1;

const calc = pipe(double, addOne);
calc(3);  // 3 * 2 + 1 = 7

高阶函数对比

类型说明示例
参数为函数接收回调执行map, filter, reduce
返回函数生成新函数bind, 柯里化
两者兼具既接收又返回装饰器模式

要点总结

  • 高阶函数接收或返回函数,实现代码复用
  • 内置 map/filter/reduce 是最常用的高阶函数
  • 柯里化将多参数函数转为单参数函数链
  • 函数组合 pipe/compose 实现功能串联

📝 发现内容有误?点击此处直接编辑

← 上一篇 JavaScript 闭包
下一篇 → JavaScript JIT 编译优化
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库