函数柯里化浅解

首先,什么是函数柯里化?

简单点来说,平常我们不同的函数,理论上可以加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.固定易变因素 

十分感谢一只菜鸟攻城狮啊 的帮助。

原文地址:https://www.cnblogs.com/zx-qd/p/10535205.html