高阶函数是接收函数为参数或返回函数的函数,如map、filter、reduce、sort、find、some等数组方法;也可自定义,如withLog(接收函数)和makeMultiplier(返回函数),提升代码灵活性与复用性。

高阶函数就是把函数当参数传进去,或者返回一个函数的函数。它不是某种特殊语法,而是 JavaScript 中函数作为“一等公民”的自然体现——函数可以被赋值、传递、返回,就像数字或字符串一样。
哪些内置方法是典型的高阶函数?
JavaScript 很多数组方法都是高阶函数,因为它们接收一个函数作为参数来处理数据:
-
map():对每个元素调用函数,返回新数组。比如
[1,2,3].map(x => x * 2)得到[2,4,6] -
filter():用函数判断真假,留下“真值”元素。比如
[1,2,3,4].filter(x => x % 2 === 0)得到[2,4] -
reduce():用函数累积计算,把数组“压成”一个值。比如
[1,2,3].reduce((sum, x) => sum + x, 0)得到6 - sort()、find()、some() 等也一样,都靠传入的函数决定行为
怎么自己写一个高阶函数?
只要函数接受函数为参数,或返回函数,它就是高阶函数。常见写法有两类:
-
接收函数作参数:比如封装一个带日志的加法器
function withLog(fn) { return function(...args) { console.log('call', fn.name); return fn(...args); }; }
const loggedAdd = withLog((a,b) => a + b);
loggedAdd(2,3); // 输出 'call add',再返回 5 -
返回一个函数:比如生成不同倍数的乘法器
function makeMultiplier(n) { return x => x * n; }
const double = makeMultiplier(2);
const triple = makeMultiplier(3);
double(5); // 10
triple(5); // 15
高阶函数的实际好处是什么?
它让代码更灵活、可复用,避免重复逻辑:
立即学习“Java免费学习笔记(深入)”;
- 把“做什么”(业务逻辑)和“什么时候做/怎么做”(遍历、条件、时机)分开。比如
map负责遍历,你只管写“每个元素怎么变” - 支持函数组合,比如
compose(f, g)(x)等价于f(g(x)),便于构建复杂操作 - 配合闭包能创建私有状态,像上面的
makeMultiplier就把n封装起来了
基本上就这些。高阶函数不是炫技,而是让函数真正“活起来”的基本功。











