常见函数式编程术语

最近看到函数式编程,觉得好高大上。。这是啥玩意儿?  在这里记录一下心得体会。。

1、纯函数

定义:对于相同的输入,永远得到相同的输出,不依赖,不修改其作用域之外变量的函数

一脸懵。。啥叫相同的输入永远得到相同的输出?举个栗子吧!

数组的slice方法,不管你执行了多少遍,最后输出这个数组都是不变的,其实也就是没有改变原数组。。

那换一个方法呢?

数组的splice方法会改变原数组,所以相同的输入得不到相同的输出

那还有一条不依赖,不修改其作用域之外的变量呢?

该函数的执行需要依赖外部的num变量,所以它不是纯函数,那修改一下呢?

并没有外部变量啥事儿,符合纯函数定义。。再来看下面这个

这个肯定不是纯函数了吧!因为它依赖了外部传进来的num变量 , 可如果你了解预编译的话,你会知道它拿的并不是外部的变量,而是自己的形参 , 所以这也是个纯函数。。。

栗子举完啦,那它到底有啥用呢??它的用处就是。。。减少BUG! 提到BUG就让人头皮发麻。。俗话说,当你修改了10个BUG,可能会多出来10个BUG。。。因为任何一个地方都可以修改全局变量,可一旦你修改了全局变量,就会导致某个地方出现异常,代码少的话好说,那万一多了呢?  所以纯函数能帮助我们更好地排错!

2、偏函数

定义:固定一个函数的一个或者多个参数,然后返回一个新函数,返回入参函数的剩余函数的接受应用

有一点抽象。。。查了下资料,还是举个栗子吧

偏函数的作用就是把一个函数里相同的参数给固定,调用的时候只需要传不相同的那个参数就好了,节省代码量。。利用了闭包来实现。。

3、节流

定义:节流就是预定一个函数只有在大于等于周期时才执行,周期内调用不执行,就好像水滴积攒到一定重量后才会落下一样。

 某些用户行为会频繁的触发事件导致界面卡顿,甚至浏览器崩溃,节流和防抖就是为了解决类似需求。

这样一来,频繁触发事件只有触发时间大于300才会触发一个

4、防抖

 定义:函数需要频繁触发时,只有足够空闲的时间,才执行一次。

看到一个很形象的比喻。。防抖就好像公交车司机会等人全部上车后才发车一样。。比如百度搜索的时候就需要用到防抖,用户输入关键词完毕后再请求数据,而不是输入一个就请求一次。

debounce是个防抖函数,对ajax这个函数进行了处理,用户输入时则会清除上一次的定时器并且开启一个新的定时器,一秒钟后再执行ajax函数,也就是说用户如果没有停止输入那么ajax函数就不会执行,直到用户输入完毕1秒后才会执行ajax函数。

5、扁平化   

定义:把一个多维数组降维   

听起来有点像《三体》小说里的降维打击啊有木有!!

写个栗子。。

递归判断是不是数组,不是就push到一个新数组里

还有第二种写法

这种的话范围比较狭窄,数组里只能是数字。。。

6、柯里化和反柯里化  待续.....

 

猜你喜欢

转载自blog.csdn.net/qq_36379070/article/details/81938967