函数柯里化浅解
首先,什么是函数柯里化?
简单点来说,平常我们不同的函数,理论上可以加n个参数像下图
这个简单的加法函数 传进去a,b,c,d 四个参数 理论上,极限来说,可以传n个。
而函数柯里化,就如下图
、
此时add(1,2,3,4)与 _add(1)(2)(3)(4) 的效果是一样的
正规点来说:在一个函数中首先填充几个参数(然后再返回一个新函数)的技术称为柯里化(Currying)。
通俗化来讲,函数柯里化就是把要传一个很多参数的函数,利用函数闭包的特性,在函数执行后没有立即销毁参数,而是等待下一个参数的传入,这这里就是重新return了一个函数
正如上面所说返回了一个新函数。最近有看见一个新的,我觉得还不错,有的人说不咋地先拿出来吧
柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果。
函数柯里化在接受到n个参数后会在函数内部进行长度检验,直到不匹配了,进行一次输出,整个传参的过程中,最终的函数运算只进行一次。
话不多说先上图。
我们来看第38行的getNewArray。执行这个函数,就上去了第34行_getNewArray ,此时把_map传入到了Curry函数里 ,也就是说直接把_map方法传到了Curry函数里
我们来打印一下
可以看出是把整个函数传入,进行条件判断,此时重定向函数.因为argument没有数组里的方法。用call()函数重新定向
然后把_args,args合并成一个,进行逻辑判断,发现长度小于artiy,进行二次传值,这个流程走完了,再把function(item)传入
此时我们定义好的数组都是在第二次传入curry()函数 此时参数收集完毕,执行函数func,而此时的func指的是我们二次传入的
function(item) 最后一次执行,返回结果。
再来说说柯里化的好处吧!
特点:1.提高了代码的合理性,更重的它突出一种思想---降低适用范围,提高针对性。
2.对于一个已有函数,对其约定好其中的某些参数输入,然后生成一个更有好的、更符合业务逻辑的函数。
好处:1.提高针对性
2.延迟执行(只有在最后一次才执行)
3.固定易变因素
十分感谢一只菜鸟攻城狮啊 的帮助。