函数柯里化

110 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

题外话

这个疫情啊,真滴是服气了,居家快一个月了,居家不是办公就是做饭,脑子都快麻木了,为了活跃自己的大脑,也为了帮助大家增长知识,我给大家分享一点冷知识,嘿嘿嘿……

冷知识:车厘子就是大一些的樱桃,无论商家如何宣传,但本质却是一模一样的。

咳咳~进入正题吧

开始

在开始介绍什么是柯里化之前,我们先来理解一个概念————JavaScript纯函数,可能有人听说过,也可能有很大一部分人没听说过。但是知道react的小伙伴一定听说过,在用react的时候是建议使用纯函数的。那么我们就先来认识一下Javascript纯函数

Javscript纯函数

纯函数的维基百科定义如下

  • 在程序中,若一个函数符合以下条件,那么这个函数被称为纯函数:
    • 函数在相同的输入值时,需产生相同的输出。
    • 函数的输出和输入值以外的其他隐藏信息和状态无关,也和I/O设备产生的外部输出无关
    • 该函数不能有语义上可观察的函数的副作用,诸如,触发事件使输出设备输出、或更改输出值以外物件的内容等。

我们可能一脑门子问号,这说的是什么意思,看了但是又好像没看,下面我们就详细的解释一下维基百科的这段话。

Javscript纯函数总结

  • 确定的输入一定得到的是确定的输出
  • 函数在执行的过程中,一定不能产生副作用

看到这里估计有有人问了,总结的我也没看明白呀,那就接着往下看,我们继续解释......

确定的输入一定得到的是确定的输出

这里举一个例子

function foo(num1, nums2) {
    return nums1 + nums2
}

var result = foo(1, 2)
console.log(result)    //3

这这段代码中,无论我们输入num1num2是多少,得到的一定是他俩的和,只会有一个结果,不存在其他的输出结果。

函数在执行过程中,一定不能产生副作用

我们日常听到副作用,大概率都是在医疗方面。那么在计算机科学中,我们也可以将这个副作用看作是治疗某种疾病之后所带来的其他问题。

在计算机科学中,表示在执行一个函数时,除了返回函数值之外,还对调用函数产生了附加的影响,比如修改了全局变量,修改参数或者改变外部的存储

比如下面这段代码

let name = "abc"

function fn() {
    name = "cba"
    return name
}

let result = fn()
console.log(result)   //cba

这段代码中,函数fn中改变了全局变量name,那么函数fn就不能称之为纯函数,因为它引发了其他的变量被改变了。

关于纯函数今天就介绍到这里,下一篇将开始正式的函数柯里化,再见啦~