函数表达式通过闭包实现动态配置,外层函数接收配置参数并返回记忆该配置的新函数,支持运行时更新、高阶函数组合及嵌套复用,适用于表单验证等场景。

函数表达式可以灵活地实现动态配置函数,关键在于把配置项作为参数传入,返回一个根据配置生成的新函数。
用闭包封装配置
将配置对象或值作为外层函数的参数,内部返回一个使用该配置的函数。这样每次调用外层函数,就能得到行为不同的新函数。
- 配置可以是阈值、格式模板、回调逻辑等任意数据
- 返回的函数自动“记住”配置,无需每次重复传入
- 适合需要创建多个相似但参数不同的处理函数的场景
支持运行时更新配置(可选)
如果配置需要后续修改,可在闭包内提供 setter 方法,或返回一个带配置管理能力的对象。
- 例如返回
{ execute: fn, setConfig: (newCfg) => {...} } - 避免重新创建函数,提升性能,尤其在事件处理器等高频场景中
- 注意同步更新可能影响正在执行中的逻辑,必要时加锁或标记版本
结合高阶函数组合行为
把配置函数作为参数传给高阶函数,让行为组装更清晰。比如日志开关、重试次数、超时时间都可以独立配置。
- 常见模式:
withTimeout(withRetry(apiCall, { retries: 2 }), 5000) - 每个高阶函数只关心自己的配置项,职责单一,易于测试和复用
- 配置可嵌套、可复用,也支持部分应用(partial application)
实际例子:动态表单验证器
根据字段类型和规则生成校验函数:
const createValidator = (rules) => (value) => {
for (const [rule, param] of Object.entries(rules)) {
if (rule === 'required' && !value) return false;
if (rule === 'minLength' && value.length
每个 validator 都携带自己的规则,调用时不需再传配置,语义清晰且可复用。











