高阶函数是能接收函数作为参数或返回函数的函数。其核心标准为:形参含函数类型,或返回值为函数本身(非调用结果),二者满足其一即成立,如map、settimeout等均属典型应用。

高阶函数就是能接收函数当参数,或者返回函数的函数。它不神秘,核心就两条:函数可以像数字、字符串一样被传进去,也能像结果一样被 return 出来。
高阶函数的定义标准
只要满足下面任意一条,就是高阶函数:
- 函数的形参中至少有一个是函数类型(比如
fn、callback、transform) - 函数的
return值是一个函数(不是调用结果,而是函数本身)
两者同时满足也完全合法,比如一个函数既接收回调,又返回新函数做封装。
把函数作为参数传递的实际写法
关键不是“怎么声明”,而是“怎么传、怎么用”——传的是函数名(不带括号),用的时候再加括号调用:
- 定义接收函数的高阶函数:
function runWith(fn, data) { return fn(data); } - 准备一个普通函数:
const toUpper = str => str.toUpperCase(); - 把函数当值传进去:
runWith(toUpper, "hello")→ 返回"HELLO" - 不能写成
runWith(toUpper(), "hello"),那样传的是执行结果,不是函数本身
常见且实用的参数传递场景
日常开发里,这些地方都在默默用高阶函数:
-
array.map(callback):callback就是传入的函数,决定每个元素怎么变 -
setTimeout(handler, delay):handler是延时后要执行的函数 -
button.addEventListener("click", handleClick):事件触发时才调用handleClick - 自定义工具函数,比如
retryAsync(fetchFn, maxTimes),把请求函数作为参数灵活替换
为什么这样设计有用
把函数当参数,本质是把“怎么做”和“做什么”分开:
- 不变的部分(比如遍历数组、重试逻辑、监听流程)由高阶函数封装好
- 变的部分(比如具体转换规则、失败处理方式、点击后行为)由传入的函数决定
- 代码复用率提高,后续加新功能不用改主逻辑,只换一个函数就行
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











