函数柯里化粗解释

函数柯里化

把一个多参数的函数,转化为单参数函数

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)
posted @   Dollom  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示