函数表达式是实现动态函数行为最常用、安全、自然的方式,通过闭包、高阶函数、配置驱动等机制,在不使用eval或new Function的前提下动态创建、组合和复用函数。

函数表达式本身不是“动态生成”的代名词,但它是最常用、最安全、最自然的实现动态函数行为的方式——关键在于把函数当作值来传递、组合和返回,而不是在运行时拼字符串执行代码。
用函数表达式返回新函数(闭包)
这是最典型也最推荐的做法。通过外层函数接收配置参数,内部返回一个绑定好这些参数的新函数。
- 外层函数负责“定制逻辑”,比如固定部分参数、预设行为或读取上下文
- 内层函数形成闭包,能持续访问外层作用域的变量
- 每次调用外层函数,就得到一个独立、可复用的新函数
例如:
const makeMultiplier = factor => x => x * factor;const double = makeMultiplier(2);
const triple = makeMultiplier(3);
console.log(double(5)); // 10
console.log(triple(5)); // 15
把函数表达式赋给变量或对象属性
函数表达式可以随时被创建、重赋值、存入数组或对象,从而实现运行时“注册”或“切换”行为。
- 适合构建插件系统、事件处理器映射表、策略模式等场景
- 不需要 eval 或 new Function,无安全风险,调试友好
- 可结合条件判断、配置项或用户输入动态决定赋什么函数
例如:
const handlers = {};handlers['save'] = () => api.save();
handlers['export'] = format => api.export(format);
// 后续根据类型选择调用:
handlers['export']('csv');
配合高阶函数组合出新函数
函数表达式天然支持函数式编程风格:传入函数、返回函数、组合函数。
- 常见组合方式包括柯里化(curry)、偏函数应用(partial)、管道(pipe)、装饰(decorate)
- 这些操作不改变原函数,而是基于它生成语义更明确的新函数
- 所有操作都基于普通函数表达式,无需字符串解析
例如柯里化:
const add = (a, b) => a + b;const add5 = b => add(5, b); // 手动柯里化
// 或用通用工具:
const curry = fn => a => b => fn(a, b);
const addCurried = curry(add);
const add10 = addCurried(10);
与模板或配置驱动逻辑结合
当业务规则来自外部(如 JSON 配置、用户表单、数据库字段),可用函数表达式封装执行逻辑。
- 把配置中的字段名、运算符、阈值等作为参数传入工厂函数
- 工厂函数内部用函数表达式构造校验器、转换器或过滤器
- 避免硬编码分支,提升可维护性
例如:
const createValidator = ({ field, op, value }) => {switch (op) {
case 'gt': return obj => obj[field] > value;
case 'includes': return obj => obj[field]?.includes(value);
}
};
const ageCheck = createValidator({ field: 'age', op: 'gt', value: 18 });

















