掌握JavaScript函数式编程的关键是理解三个核心动作:写纯函数、用不可变方式处理数据、组合函数;纯函数要求输入相同则输出相同,不读写外部变量、不修改参数;数组操作用concat/map/filter而非push/splice,对象更新用展开运算符或Object.assign;优先使用map/filter/reduce代替for循环;通过链式调用组合小函数,如filter→map→join;重写命令式代码为函数式风格以验证效果。

掌握 JavaScript 的函数式编程基础,关键不是背概念,而是理解三个核心动作:写纯函数、用不可变方式处理数据、把函数当“零件”组合使用。这些不是新语法,而是用已有能力换一种组织逻辑的方式。
从纯函数开始,先戒掉“改东西”的习惯
纯函数指:输入一样,输出一定一样;不读写外部变量;不修改传入的参数。它像数学公式,没有意外。
- 把副作用(比如修改全局变量、发请求、改 DOM)从计算逻辑里剥离开,单独处理
- 遇到数组操作,别用 push、splice 这类直接改原数组的方法,改用 concat、map、filter 返回新数组
- 对象更新不用 user.age = 31,而写成 { ...user, age: 31 } 或用 Object.assign({}, user, { age: 31 })
用高阶函数代替循环和临时变量
JavaScript 的 map、filter、reduce 就是现成的函数式工具,它们接受函数作为参数,帮你把“做什么”和“怎么做”分开。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- map:对每个元素做转换,返回等长新数组
- filter:按条件留下元素,不改变原始结构
- reduce:把一堆值聚合成一个结果,比如求和、分组、扁平化
- 避免手写 for 循环处理数组,除非有明确性能要求或需要中断流程
学会组合小函数,而不是堆大函数
函数式编程里,能力来自拼装,不是单个函数多复杂。比如“获取活跃用户姓名列表”,可以拆成:filter(是否活跃) → map(取姓名) → join(拼字符串)。
立即学习“Java免费学习笔记(深入)”;
- 用箭头函数快速定义小逻辑,例如 const isAdult = user => user.age >= 18
- 尝试把多个操作链起来:users.filter(isAdult).map(getName).join(', ')
- 不必一开始就写柯里化或 Monad,先让 map/filter/reduce 成为本能反应
在真实场景里验证,别只学理论
找一段你原来用命令式写的代码(比如处理表单数据、格式化列表),试着重写成函数式风格:
- 删掉所有 let 声明的中间变量
- 把每步操作提取成独立函数,哪怕只有两行
- 观察重写后是否更容易测试(给相同输入,是否总得相同输出)
- 留意哪些地方还是忍不住改了原对象——那里就是你需要练习不可变性的点


















