外观
函数式编程在前端里指什么?
函数式编程把计算写成纯函数的组合:同样的输入永远得到同样的输出,不改外部状态。前端用它来写数据转换;界面和请求本身有副作用,要把副作用推到边缘。
原理
纯函数不依赖、也不修改函数外面的变量。map、filter、reduce 是典型的组合方式。不可变数据用新对象表达变化,旧数据还能被别的视图继续用。
好处是容易测试和推断。代价是简单更新也可能复制对象,极端追求不可变会多写样板。React 的状态更新鼓励不可变,不是要求整个项目拒绝副作用。
柯里化把多参数函数变成一串单参数函数,方便固定一部分配置。只要项目里真有重复的部分应用,再抽这层。
追问
和面向对象怎么选?
对象适合封住一组会变的状态和行为。列表转换、校验、价格计算更适合纯函数。一个组件里可以两种都有:状态放对象或 hook,计算抽成纯函数。
副作用放哪?
读接口、写 DOM、打日志留在调用纯函数的那一层。纯函数返回描述结果的数据,调用方决定要不要执行。
易错点
- 纯函数内部如果改了传入的对象,外面的状态就脏了。
- 把所有循环都改成链式
map,中间数组很多,热点路径要看测量。 - 「函数式」不是禁用
class。看的是有没有不必要的共享可变状态。