高阶函数是接受函数为参数或返回函数的函数,体现函数作为一等公民;如map、filter、reduce等数组方法,以及addeventlistener、settimeout等异步操作,还有柯里化、记忆化等自定义场景。

JavaScript 高阶函数是指**接受函数作为参数**,或**返回函数作为结果**的函数。它不依赖于函数名或调用方式,只看是否把函数当“数据”来传递或生成——这是函数作为一等公民的直接体现。
核心判断标准
满足以下任一条件即为高阶函数:
- 形参中至少有一个是函数(如
filter(callback)、setTimeout(handler, delay)) - 执行后返回一个新函数(如
const add5 = add(5)、const logError = withLevel('ERROR'))
最常用内置高阶函数(数组方法)
这些方法把“遍历+操作”的细节封装起来,你只需关注逻辑本身:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
-
map:对每个元素做转换,返回新数组
[1, 2, 3].map(x => x * 2)→[2, 4, 6] -
filter:按条件筛选,保留真值项
users.filter(u => u.isActive)→ 活跃用户列表 -
reduce:累积计算,合并为单个值
[1, 2, 3].reduce((sum, n) => sum + n, 0)→6 -
sort:自定义排序规则
arr.sort((a, b) => a.price - b.price)
异步与事件中的高阶函数
它们不返回函数,但明确以函数为参数,是解耦执行时机的关键:
-
addEventListener('click', handler):handler 在用户点击时由浏览器调用 -
setTimeout(() => console.log('done'), 1000):第一个参数必须是函数,否则报错 - 陷阱提醒:循环中用
var声明计数器传入setTimeout,所有回调会共享同一个i值——应改用let或闭包捕获
自定义高阶函数典型场景
围绕复用、增强、控制三大目标构建:
-
柯里化:固定部分参数,生成专用函数
const multiplyBy = factor => x => x * factor;const double = multiplyBy(2); double(5); // 10 -
记忆化(memoize):缓存纯函数结果,避免重复计算
const fib = memoize(n => n <br>注意:仅适用于无副作用的纯函数;小参数(如布尔值)缓存开销可能得不偿失 -
函数增强:不修改原逻辑,附加行为(如日志、错误处理)
const withLogging = fn => (...args) => { console.log('call:', args); return fn(...args); }; -
节流 / 防抖:控制函数执行频率
const throttledResize = throttle(handleResize, 100);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










