JavaScript高阶函数是至少接收函数作为参数或返回函数的函数;它依托函数为一等公民的特性,典型如map/filter/reduce接收回调函数,multiplier/createScream等返回新函数,体现抽象与复用能力。

JavaScript 高阶函数的核心能力就体现在“接收函数”和“返回函数”这两件事上——不是二者选其一,而是满足任一即可。它不依赖特殊语法,完全建立在 JavaScript 函数是一等公民(first-class citizen)这个基础上。
接收函数作为参数
这是最常见、最直观的用法。把一个函数像数字或字符串一样传进去,在内部调用它。
- 被传入的函数通常叫回调函数(callback),比如
array.map(fn)中的fn - 你不需要立即执行它,可以存起来、条件调用、多次调用,甚至传给别的函数
- 示例:
function applyTwice(value, fn) {
return fn(fn(value));
}
const result = applyTwice(5, x => x + 1); // 返回 7
返回函数作为结果
函数执行后不返回数据,而是返回另一个函数——这个新函数往往“记住”了外部函数的参数(闭包),形成可复用的行为模板。
- 这种模式常用于创建函数工厂,比如生成不同倍率的乘法器
- 返回的函数可以延迟执行,也支持后续传参(如柯里化)
- 示例:
function makeAdder(x) {
return function(y) { return x + y; };
}
const add5 = makeAdder(5);
console.log(add5(3)); // 输出 8
同时接收又返回函数
这是高阶函数的“满配版”,也是函数式编程中组合、装饰、代理等高级模式的基础。
立即学习“Java免费学习笔记(深入)”;
- 典型例子是
createScream = logger => message => logger(message.toUpperCase() + "!!!") - 第一层接收
logger(函数),第二层返回一个等待message的新函数 - 这种写法本质是两层闭包,让逻辑分阶段注入、高度解耦
怎么判断一个函数是不是高阶函数?
不用看名字,只看定义和调用方式:
- 函数声明/表达式里,形参列表中出现函数(如
fn、callback、transform)→ 接收函数 - 函数体里有
return function...或箭头函数(如return (x) => x * n)→ 返回函数 - 内置方法如
map、filter、setTimeout、addEventListener全都是现成的高阶函数


















