自动柯里化函数的实现

KooTeam / 2023-08-20 / 原文

JavaScript柯里化 柯里化也是属于函数式编程里面一个非常重要的概念。 我们先来看一下维基百科的解释:

口在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化;

口是把接收多个参数的函数,变成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数,而且返回结果的新函数的技术;

口柯里化声称“如果你固定某些参数,你将得到接受余下参数的一个函数";

维基百科的结束非常的抽象,我们这里做一个总结:

口只传递给函数一部分参数来调用它,让它返回一个函数去处理剩余的参数;

口这个过程就称之为柯里化;

自动柯里化函数的实现

 1 function add1(x,y,z){
 2     return x+y+z
 3 }
 4 
 5 //柯里化函数的实现
 6 function hyCurrying(fn){
 7     function curried(...args){
 8         // 判断当前已经接收的参数的个数,可以参数本身需要接受的参数是否已经一致了
 9         // 1.当已经传入的参数 大于等于 需要的参数时,就执行函数
10         if(args.length>=fn.length){
11             // fn(...args)
12             // fn.call(this,...args)
13             return fn.apply(this,args)
14         }else{
15             //没有达到个数时,需要返回一个新的函数,继续来接收的参数
16             function curried2(...args2){
17                 //接收到参数后,需要递归调用curried来检查函数的个数是否达到
18                 return curried.apply(this,args.concat(args2))
19             }
20             return curried2
21         }
22     }
23     return curried
24 }
25 
26 var curryAdd=hyCurrying(add1)
27 console.log(curryAdd(10,20,30))
28 // curryAdd(10,20)(30)
29 // curryAdd(10)(20)(30)