📅  最后修改于: 2023-12-03 15:21:31.984000             🧑  作者: Mango
纯函数是指在相同的输入条件下,总是返回相同的输出,不对外部环境产生副作用的函数。它们不会修改传入的参数,也不会改变全局状态。纯函数处理完输入后,返回一个新的值作为输出,而不是修改参数或全局变量的值。
纯函数有以下特点:
下面是一个简单的纯函数的例子:
function add(a, b) {
return a + b;
}
以上的函数总是返回相同的输出结果,每次的输出值都仅仅由传入的参数决定,也不会对外部环境产生副作用。
与纯函数不同,不纯函数在相同的输入条件下可能会返回不同的输出结果,或者会对外部环境产生一定的副作用,例如修改全局状态或参数的值。下面是一个简单的不纯函数的例子:
let a = 5;
function increment() {
a = a + 1;
return a;
}
以上的函数每次执行时都会修改全局变量 a
的值,并且每次的输出结果也不同。
不纯函数会产生一些意想不到的副作用。让我们来看一个例子:
let users = [
{ name: 'Mike', age: 25 },
{ name: 'John', age: 30 },
{ name: 'Kate', age: 20 }
];
function deleteUser(name) {
for (let i = 0; i < users.length; i++) {
if (users[i].name === name) {
users.splice(i, 1);
return `${name} has been deleted!`;
}
}
return `${name} not found!`;
}
以上的函数会删除全局变量 users
中的一个元素,并返回一个字符串。每次执行该函数时,都会破坏 users
数组的内容。
如何使用该函数的返回值判断数组是否被修改?如何回滚数据?这些都是不可避免的副作用。
尽管不纯函数有许多缺点,但在某些情况下,它们是有用的,例如:
纯函数只处理传入参数的值,没有不可预期的副作用。相反,不纯函数可能返回不同的输出结果或修改全局状态。
在编写代码时,请尽可能使用纯函数,减少副作用的可能性,降低代码的复杂度和维护成本。