高阶函数、柯里化、compose、pipe 与纯函数有什么联系?

先理解原理和示例,再练习完整口述与追问。

高阶函数接收或返回函数;柯里化拆分参数;组合传递结果;纯函数同输入同输出且没有可观察副作用;异步组合需另定协议。

高阶函数是以函数为参数或返回函数的函数,map、函数包装器都是常见例子。柯里化把多参数调用变成多次接收参数,例如 add(1)(2)(3),便于先固定配置、复用剩余步骤;严格的柯里化常指每次接收一个参数,工程中的 curry 工具也常支持一次收多个参数。

compose(f,g)(x) 通常表示 f(g(x)),从右往左执行;pipe(f,g)(x) 表示 g(f(x)),从左往右执行。简单组合工具通常约定每一步只接收前一步的一个结果,如果要首函数多参数、传 this 或串联 Promise,应在工具契约里说清楚,不能指望一个简单 reduce 自动处理所有情况。

纯函数只根据输入产生输出,不修改外部可观察状态,也不依赖当前时间、随机数或可变全局变量等隐含输入。纯函数方便测试、组合和记忆化,但前端真实业务必须处理网络与 DOM 等副作用,实际做法是把数据计算与副作用执行分开,而不是声称整个应用没有副作用。补充 39 给出这些工具的可执行实现及适用范围。

同样输入 3,compose(x=>x+1,x=>x*2) 先乘二再加一得到 7;pipe 先加一再乘二得到 8。把“读取配置”“校验”“转换格式”设计为纯步骤后,组合方向决定数据流顺序;请求和写文件等副作用则在明确位置执行。

异步步骤返回 Promise 时,同步 compose 会把 Promise 对象交给下一步,不会自动 await。柯里化也不同于只固定部分参数的所有 partial 工具。

高阶函数是以函数为参数或返回函数的函数,map、函数包装器都是常见例子。柯里化把多参数调用变成多次接收参数,例如 add(1)(2)(3),便于先固定配置、复用剩余步骤;严格的柯里化常指每次接收一个参数,工程中的 curry 工具也常支持一次收多个参数。