判断是否为纯函数的两个指标
1、函数的返回结果只依赖于它的参数。
2、不改变函数体外部数据、函数执行过程里面没有副作用。
纯函数和非纯函数的简单例子
1、纯函数
以下是一个计算产品税后价格(英国税率是20%)的纯函数的例子:
function priceAfterTax(productPrice) {
return (productPrice * 0.20) + productPrice;
}
它符合我们所说的两条纯函数的定义。不依赖于任何外部输入,不改变任何外部数据、没有副作用。
2、非纯函数
var tax = 20;
function calculateTax(productPrice) {
return (productPrice * (tax/100)) + productPrice;
}
其中函数的计算结果取决于外部 tax 变量,而纯函数不能依赖外部变量。
它没有满足定义中的第一个要求,因此这个函数是不纯的。
Redux中对使用纯函数reducer的要求
只需要谨记 reducer 一定要保持纯净。
只要传入参数相同,返回计算得到的下一个 state 就一定相同。
没有特殊情况、没有副作用,没有 API 请求、没有变量修改,单纯执行计算。