函数柯里化粗解释
函数柯里化
把一个多参数的函数,转化为单参数函数
fn(a,b,c)=>fn(a)(b)(c)
- fn(a)(b)(c)每次只能接收一个参数
- 使用场合:函数式编程规定要求多参数函数转化为单参数函数,固定的值绑定固定的元素,对应的输入绑定对应的输出
实例:
//一个函数
function add(a,b){
return a+b
}
//我想要转化的数据
add(1,2)
// 希望转化为 add(1)(2)
//声明一个转化函数
function addCurry(a){
return function (b){
return a+b
}
}
//此时 Curry(1)(2)的效果与 add(1,2) 是一致的
addCurry(1)(2)
柯里化函数
//柯里化工具函数
function curry(fn){
//柯里化函数内部再包裹一个自执行函数
return function curried(...args){}
//使用...args来接收所有传入的参数,本例中 ...args=[1,2,3]
//如果长度一致则可以执行逻辑运算
if(args.length===fn.length){
//fn.length就是 fn函数的参数长度
//使用return把
return fn(...args)
}else{
//如果长度并不一致则先需要把新添加进来的参数收集起来
returun function (){
//...args的全称是 ...("拓展运算符")+argument
return curried(...args.concat(Array.from(argument))){}
//使用数组方法.concat() 用于连接两个或多个数组。 因为此时的argument 是一个伪数组,所以使用Array.from(argument) 转化为数组形式
}}}
//声明定义,把addCurry1函数的值通过柯里化调用到上方的add自定义相加函数之中
let addCurry1=curry(add)
//调用函数
addCurry1(1)(2)(3)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义