函数式编程中数据结构和变量的不变性

immutability of data structures and variables in functional programming

通常说在函数式编程中数据结构是不可变的。我知道不可变数据结构是不能改变的数据结构。

但是,是否也意味着变量引用也不能改变?

例如,

var arr = [1,2,3]

arr = [4,5,6]

在这段代码中,我没有更改数组 [1,2,3],而是创建了一个新数组。尽管如此,我还是更改了变量 'arr' 的引用。这段代码是否遵循数据结构不变性原则?

您不应该重新分配引用。理想情况下,您会创建一个新变量,这样您就可以看到您所做的任何更改的 "before and after"。

底层结构仍然可以是不可变的,即使指向它的引用发生了变化。如果有人正在查看旧版本的结构,重新分配引用不会损害数据的有效性,因为旧版本仍然存在,没有变化。

Does it also mean that variable references also can't be changed?

是的。那时它们被称为 constants。你最好写

const arr1 = [1,2,3] 
const arr2 = [4,5,6]

这种方法还允许您将范围环境视为不可变数据结构,这应该是默认设置。它使对您的代码的推理变得容易得多。