函数表达式是柯里化实现的自然载体,因其返回函数值、不受提升限制、可灵活嵌套赋值;利用闭包捕获预设参数;支持分批或合并传参;便于组合复用,契合函数式编程风格。

函数表达式是柯里化实现的自然载体
函数表达式本身返回一个函数值,这与柯里化“返回函数”的本质完全契合。它不像函数声明那样受提升限制,能更灵活地嵌套、赋值和传递。例如:
const add = a => b => a + b;
这个箭头函数表达式直接定义了一个接收 a 后返回新函数的结构,无需额外包装或命名,简洁且语义清晰。
利用闭包捕获预设参数
每次调用外层函数表达式时,其参数会形成一个独立作用域,内层函数通过闭包自动持有这些值。比如:
const multiplyBy = factor => num => num * factor;
const double = multiplyBy(2);
console.log(double(5)); // 10
这里 factor 在 multiplyBy(2) 执行时被固定,double 所指向的函数始终记住这个 2,后续只关心 num 的输入。
支持参数分批传入与灵活调用
函数表达式构成的柯里化链天然支持多种调用方式。你可以一次传一个,也可以合并传多个(需配合参数收集逻辑):
const curry = fn => {
const curried = (...args) =>
args.length >= fn.length
? fn(...args)
: (...nextArgs) => curried(...args, ...nextArgs);
return curried;
};
这段代码中,curried 是一个函数表达式,它根据已收参数数量决定立即执行还是继续返回新函数。因此 curry(add)(1)(2) 和 curry(add)(1, 2) 都能正确工作。
便于组合与复用,贴近函数式风格
函数表达式轻量、无名、可立即执行,非常适合构建工具链。例如将格式化、校验、转换等操作柯里化后,可像积木一样拼接:
const toFixed2 = digits => num => num.toFixed(digits);
const safeParse = radix => str => parseInt(str, radix) || 0;
const parseAndRound = safeParse(10)(toFixed2(2));
虽然实际组合需稍作适配,但每个环节都是纯函数表达式,职责单一,易于测试和替换。
立即学习“Java免费学习笔记(深入)”;


















