什么是纯函数?

    纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。

    通俗来讲,就两个要素

    1. 相同的输入,一定会得到相同的输出

    2. 不会有 “触发事件”,更改输入参数,依赖外部参数,打印 log 等等副作用

    1. /*不是纯函数,因为同样的输入,输出结果不一致*/
    2. function a( count ){
    3. return count + Math.random();
    4. }
    5. /*不是纯函数,因为外部的 arr 被修改了*/
    6. function b( arr ){
    7. return arr.push(1);
    8. }
    9. let arr = [1, 2, 3];
    10. b(arr);
    11. console.log(arr); //[1, 2, 3, 1]
    12. /*不是纯函数,以为依赖了外部的 x*/
    13. let x = 1;
    14. function c( count ){
    15. return count + x;
    16. }

    我们的 reducer 计划函数,就必须是一个纯函数!

    只要传入参数相同,返回计算得到的下一个 state 就一定相同。没有特殊情况、没有副作用,没有 API 请求、没有变量修改,单纯执行计算。