高阶函数是接受函数作为参数或返回函数的函数;JavaScript中函数是一等公民,map、filter、reduce等均为高阶函数,用于解耦逻辑、提升复用性与可测试性,但需注意this绑定、闭包陷阱及过度嵌套问题。
高阶函数就是接受函数作为参数或返回函数的函数
JavaScript 中的函数是一等公民,这意味着它可以像字符串、数字一样被赋值、传参、返回。所谓“高阶函数”,不是指它多厉害,而是它满足以下任一条件:
,或者
。常见的
、
、
、
、
全是高阶函数——它们不直接操作数据,而是靠你传进来的函数来定义“怎么操作”。
为什么用高阶函数而不是普通循环?
核心在于解耦与复用。比如你想对数组做三件事:筛选偶数、转成字符串、求和。如果写三个 for 循环,逻辑重复且难维护;用高阶函数,只需提供不同的
回调函数
:
每个方法只关心“遍历+聚合”这件事,具体行为由你传的箭头函数决定。这比手动写
更安全(不会越界)、更易读(意图明确)、更容易测试(回调可单独抽离)。
容易踩的坑:this 绑定、闭包陷阱、过早执行
高阶函数本身不复杂,但组合使用时容易出问题:
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
立即学习
“
Java免费学习笔记(深入)
”;
或
里用普通函数时,
可能丢失——改用箭头函数或显式
在循环中创建函数(比如用
批量延时),不加
或闭包包裹,所有回调会共享最后一个循环变量值
把函数调用写成函数引用:写成
是立即执行,应为
嵌套太多高阶函数(如
)可能影响可读性,超过三层建议拆成带名变量
函数式编程中它不只是“语法糖”
高阶函数是函数式编程落地的关键机制,但它真正起作用的地方不在“写法多酷”,而在支持
纯函数抽象
和
组合能力
。例如:
这里
是高阶函数,它不处理字符串,只负责拼接行为逻辑。你可以任意组合
、
、
等纯函数,而不用修改原函数——这种“行为即数据”的思路,才是函数式编程想通过高阶函数达成的实质。别只盯着
和
,真正难的是设计出可组合、无副作用、能被自由传递的函数接口。
接收一个或多个函数作为参数返回一个函数mapfilterreducesetTimeoutaddEventListenerconst numbers = [1, 2, 3, 4, 5];
const evens = numbers.filter(n => n % 2 === 0); // [2, 4]
const strings = numbers.map(n => n.toString()); // ['1','2','3','4','5']
const sum = numbers.reduce((acc, n) => acc + n, 0); // 15forfiltermapthis.bind()setTimeoutletonClick={handleClick()}onClick={handleClick}arr.map(...).filter(...).reduce(...)const compose = (f, g) => x => f(g(x));
const toUpper = s => s.toUpperCase();
const exclaim = s => s + '!';
const shout = compose(exclaim, toUpper);
shout('hello'); // 'HELLO!'composetoUppertrimreplacemapfilter