高阶函数是接受函数作为参数或返回函数作为结果的函数。它体现“函数可被当作值传递和生成”,常见于数组方法、定时器、防抖、柯里化及Promise链等场景,判断依据是形参含函数类型或返回函数表达式。

高阶函数是指**接受函数作为参数,或者返回函数作为结果**的函数。它不是某种特殊类型,而是对函数使用方式的一种描述——核心在于“函数可被当作值来传递和生成”。
接受函数作为参数的高阶函数
这是最常见的情形:把一个函数传进去,让它在合适时机被调用(比如遍历、过滤、转换时)。
- Array.prototype.map():对数组每个元素执行传入的函数,返回新数组
- Array.prototype.filter():用传入的函数判断是否保留当前元素
- Array.prototype.reduce():用传入的累加器函数逐步合并数组值
- Array.prototype.sort():传入比较函数决定排序逻辑
- setTimeout() / setInterval():第一个参数就是将在未来执行的函数
返回函数的高阶函数
这类函数本身不直接做事,而是生成并返回一个新的函数,常用于配置、封装或延迟执行。
- function createMultiplier(n) { return function(x) { return x * n; }; }:返回一个乘以 n 的函数
- const debounce = (fn, delay) => { ... return function() { ... }; };:防抖函数,返回包装后的新函数
- curry() 实现(如 _.curry 或手写):把多参数函数转成可分步调用的函数链
既是参数接收者又是返回者:典型工具函数
很多实用函数同时满足两个条件,体现高阶函数的灵活性。
立即学习“Java免费学习笔记(深入)”;
- Promise.then(onFulfilled, onRejected):接收回调函数,并返回新的 Promise(链式调用基础)
- async/await 底层依赖的 Promise 处理逻辑:本质上是高阶控制流抽象
- React 中的高阶组件(HOC):如 withRouter、connect(Redux),接收组件返回新组件(组件即函数)
自定义高阶函数的关键特征
判断自己写的函数是不是高阶函数,看两点:
- 函数体内有没有 形参是函数类型(例如 callback、transform)
- 函数体结尾有没有 return 一个 function 表达式或箭头函数
- 两者满足其一,就是高阶函数;都满足,就更典型










