【发布时间】:2020-06-07 07:24:38
【问题描述】:
我有以下功能。
const array = [1, 2, 3];
// Impure function
function addElementToArray(element) {
array.push(element);
}
这是一个不纯函数,因为它会改变全局数组。所以,我认为将整个数组作为函数参数将使函数变得纯粹。
function addElement(array, element) {
array.push(element);
}
但是,我发现它也有副作用。
那么,让它成为纯函数的最佳方法是什么?
【问题讨论】:
-
最好的方法是使用函数式数据结构,例如列表。然后你可以将一个新元素 cons 到列表中,这是一个常数时间的操作。
-
@AaditMShah OP 正在寻找纯函数实现;这仍然不是纯粹的,因为它仍然会改变输入,无论复杂性如何。
-
@avocadatoria 不,它不会改变输入。它将构造一个新列表,其中新元素作为头部,旧列表作为尾部。函数式数据结构是不可变的。
-
不清楚这里的目标是什么。使函数成为纯函数的最简单方法是删除所有具有不良副作用的语句,因此
function addElementToArray(element) {}。那么你到底想用数组做什么呢?这是一个重要的问题,答案将指导您了解所需的功能和数据结构。 -
@AaditMShah 知道了;我误解了你的建议。
标签: javascript function ecmascript-6 functional-programming