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)