小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
函数是一个非常重要的改变,函数式编程就是一种证明!
函数式编程中有很多重要的概念,我们今天就谈谈比较常见和好理解的 函数副作用, 高阶函数。
函数副作用
指调用函数时,除了返回函数值之外,还对外界产生附加的影响。 副作用是在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互。
与副作用,对用的还有一个概念,纯函数。
纯函数的定义:
纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。
即: 同入同出 + 无副作用。
副作用可能包含,但不限于:
-
修改了变量
var rate = 1; function sum(sum1, sum2){ rate = 2; return sum1 + sum2 }其对外面的变量rate进行了修改
-
修改了入参
function sum(sum1, sum2){ sum1 = 10; return sum1 + sum2 }其对入参sum1做了修改。 更严重的是如果对引用类型的参数做了修改,即有可能导致后面的程序发生意外, 所以,我们如果可能会修改入参,一定要使用复制,
-
输出了日志
没错,你即使是用了console.log,也就是有了副作用。 -
操作了DOM
操作DOM也不行 -
发送了http请求
发送请求也不行,因为你发了请求,导致外面的世界发生了变了。 -
操作客户端存储
比如cookie, storage, indexedDB等等 -
与service worker, iframe通讯等等
高阶函数
高阶函数是一个接收函数作为参数或将函数作为输出返回的函数。
- 函数为入参
- 函数为返回值
满足任一条件即可。 衍生除了 高阶组件。
我们平时使用的数组的方法基本都是:
- Array.prototype.filter
- Array.prototype.find
- Array.prototype.map 等等,因为他们都是以函数为入参的。
柯里化, 就是高阶函数的一种典型应用。
Function.prototype.bind那你说是不是高阶函数呢?
高阶函数的目的很明确,复用 + 美化代码,没错吧,在座的各位!
小结
今天我们简单学习了副作用和高阶函数, 下期再见哦! 今天你收获了吗?
mostly-adequate-guide-chinese
Functional-Light-JS
fp-jargon-zh