纯函数
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:''});