JavaScript高阶函数指接收函数为参数或返回函数的函数,体现函数式编程思想;常见内置方法有map、filter、reduce、sort,手动实现如once、curry、compose,提升代码复用性与可维护性。

JavaScript高阶函数是指接收函数作为参数,或返回函数作为结果的函数。它不是某种特殊语法,而是函数式编程思想在JS中的体现——把函数当作“一等公民”来使用。
常见的高阶函数(内置)
ES5之后,数组方法大量采用高阶函数设计,最典型的是:
- 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((acc, x) => acc + x, 0) → 6
- sort():接受比较函数决定排序逻辑。例如:[3,1,2].sort((a,b) => a - b) → [1,2,3]
手动写的高阶函数例子
你可以轻松自己定义高阶函数,关键在于参数是函数,或返回函数:
- once(fn):返回一个只执行一次的函数封装。const init = once(() => console.log('run')); 调用多次也只输出一次
- curry(fn):把多参数函数转为可分步传参的形式。例如:add(1)(2)(3) 等价于 add(1,2,3)
- compose(...fns):从右到左组合多个函数,如 compose(f,g,h)(x) 相当于 f(g(h(x)))
为什么用高阶函数?
它让代码更灵活、可复用、易测试:
立即学习“Java免费学习笔记(深入)”;
- 避免重复逻辑——比如统一处理异步失败时,用 withErrorHandling(apiCall) 包一层
- 支持声明式写法——data.filter(isActive).map(toName) 比 for 循环更清晰
- 便于抽象通用行为——节流、防抖、日志拦截、权限校验,都靠高阶函数实现
基本上就这些。高阶函数本身不复杂,但它是理解现代JS库(如React Hooks、Redux、Lodash)的重要基础。










