跳到主要内容

纯函数

2024年03月12日
柏拉文
越努力,越幸运

一、认识


纯函数: 相同的输入永远会得到相同的输出,该函数的输出除和输入值有关外,与其他的隐藏信息或者状态无关。而且没有任何可观察的副作用。例如lodash是一个纯函数的功能库,提供了对数组、数字、对象、字符串、函数等操作的一些方法。再比如说数组的slice是一个纯函数,因为slice返回数组中的指定部分,不会改变原数组。数组的splice是一个不纯的函数,因为splice对数组进行操作返回该数组会改变原数组。

副作用 副作用让一个函数变的不纯。纯函数根据相同的输入返回相同的输出,如果函数依赖于外部的状态就无法保证输出相同,就会带来副作用。

  • 情况一: 与外部状态有关,则不是纯函数

    const z = 3;
    function foo(x,y){
    return x+y+z;
    }
    console.log(foo(1,2)); // foo 函数依赖于外部 z 的状态,不是纯函数。
  • 情况二: 更改了除输出值以外的其他东西(产生了副作用)修改了参数,则不是纯函数。

    const array = [1,2,3];
    function foo(x,y){
    array.splice(1,1);
    }
    foo(array);
    console.log(array); // splice 会改变 array 数组,不是纯函数。
  • 情况三: 更改了除输出值之外的其他东西(产生了副作用)修改了参数,则不是纯函数

    function foo(obj){
    obj.name = '柏拉图'
    }
    foo({name:''});