猿问

为什么不变性在JavaScript中如此重要(或需要)?

我目前正在研究React JS和React Native框架。在阅读关于Facebook的Flux和Redux实现的文章时,我遇到了Immutability或Immutable-JS库。


问题是,为什么不变性如此重要?突变对象有什么问题?它不是使事情变得简单吗?


举个例子,让我们考虑一个简单的新闻阅读器应用程序,其打开屏幕是新闻标题的列表视图。


如果我设置说最初具有值的对象数组,我将无法对其进行操作。这就是不变性原则的意思,对吗?(如果我错了,请纠正我。)但是,如果我有一个新的News对象必须更新怎么办?在通常情况下,我可以将对象添加到数组中。在这种情况下我该如何实现?删除商店并重新创建?是不是将对象添加到数组中的开销较小?


子衿沉夜
浏览 789回答 3
3回答

慕码人8056858

问题是,为什么不变性如此重要?突变对象有什么问题?它不是使事情变得简单吗?实际上,事实恰恰相反:可变性使事情变得更复杂,至少从长远来看。是的,它使您的初始编码更加容易,因为您可以随心所欲地进行更改,但是当程序变大时,这将成为一个问题–如果更改了值,什么更改了?当您使所有内容不变时,这意味着数据再也不会因意外而更改。您肯定知道,如果将值传递给函数,则无法在该函数中对其进行更改。简而言之:如果您使用不可变的值,则很容易就可以对您的代码进行推理:每个人都会获得数据的唯一*副本,因此它无法处理并破坏代码的其他部分。想象一下,这使在多线程环境中工作变得容易得多!注意1:根据您所做的操作,不变性可能会带来性能损失,但是Immutable.js之类的东西会尽可能地优化。注2:在不太确定的情况下,您不确定Immutable.js和ES6的const含义完全不同。在通常情况下,我可以将对象添加到数组中。在这种情况下我该如何实现?删除商店并重新创建?是不是将对象添加到数组中的开销较小?PS:如果该示例不是解释不变性的正确方法,请让我知道什么是正确的实际示例。是的,您的新闻示例非常好,您的推理也完全正确:您不能只修改现有列表,因此需要创建一个新列表:var originalItems = Immutable.List.of(1, 2, 3);var newItems = originalItems.push(4, 5, 6);
随时随地看视频慕课网APP
我要回答