柯里化
1、柯里化,是函数式编程中的一个技巧,又称卡瑞化或者加里化,是把接收到多个参数的函数变换成接收单个参数且重复调用,持续返并接收余下的参数。
2、首先看一种柯里化的简单实现。利用柯里化函数实现累加求和,这里可以利用闭包,每调用一次时返一个新的函数,该函数接受新的调用,然后再次返新的函数,直至返最后的结果。下面两图中均可以实现3个变量值的累加,但是调用的方式不同。
3、如图所示为函数的调用方式,可以看到,一般的函数是将所有参数一次性传入,柯里化函数的参数是以多次调用传入的,所得到的效果是一样的。但是这里要注意,一般函数如果要实现,传入的参数个数是要提前定义好的,不太灵活,而柯里化可以灵活地处理参数的传入。上图只是模拟柯里化的一种实现方式
4、接下来介绍柯里化的通用实现。这里也是利用函数的隐式参数arguments的特性去读取参数,然后利用call/apply借调函数完成函数的调用。fn为需要柯里化处理的函数,处理后便可以多次调用传参了。
5、柯里化的另一种应用场景:延迟计算。首先将函数柯里化,然后累计传入的参数,直到得到执行指令一般是传参为空再执行。
6、js的bind应用。js方法中的bind方法也是应用了柯里化的理念,bind 方法 将第一个参数设置为函数执行的上下文,其他参数依次传递给调用方法,保证方法的执行的上下文不被改变。