函数式编程中的不可变性
在传统编程中,数据通常是可变的,这意味着在创建后可以随意修改和更改数据。让我们看一个例子:
let arr = [1, 2, 3];
arr.push(4); // `arr` 现在是 [1, 2, 3, 4]
然而,在函数式编程中,数据被视为不可变,这意味着一旦创建就无法更改。而是基于旧数据创建新数据。这有助于防止意外后果,并使程序更易于理解。
const arr = [1, 2, 3];
const newArr = [...arr, 4];
// `newArr` 是 [1, 2, 3, 4],`arr` 仍然是 [1, 2, 3]
如上例所示,原始数组没有被修改。相反,基于旧数组创建了一个新数组。原始数组仍然可用,并且如果需要,可以在程序的其他地方使用。
[!NOTE]
在这两个例子中,数组在技术上是可变的,无论是使用
let
还是const
创建的。然而,在第一个例子中,数组通过使用Array.prototype.push()
进行了变异,而在第二个例子中,数组没有被变异。这是因为Array.prototype.push()
在原地变异数组,而扩展运算符 (...
) 创建了一个新数组。