为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

子衿沉夜 2020-02-03 14:55:29
我目前正在研究React JS和React Native框架。在阅读关于Facebook的Flux和Redux实现的文章时,我遇到了Immutability或Immutable-JS库。问题是,为什么不变性如此重要?突变对象有什么问题?它不是使事情变得简单吗?举个例子,让我们考虑一个简单的新闻阅读器应用程序,其打开屏幕是新闻标题的列表视图。如果我设置说最初具有值的对象数组,我将无法对其进行操作。这就是不变性原则的意思,对吗?(如果我错了,请纠正我。)但是,如果我有一个新的News对象必须更新怎么办?在通常情况下,我可以将对象添加到数组中。在这种情况下我该如何实现?删除商店并重新创建?是不是将对象添加到数组中的开销较小?
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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


实际上,事实恰恰相反:可变性使事情变得更复杂,至少从长远来看。是的,它使您的初始编码更加容易,因为您可以随心所欲地进行更改,但是当程序变大时,这将成为一个问题–如果更改了值,什么更改了?


当您使所有内容不变时,这意味着数据再也不会因意外而更改。您肯定知道,如果将值传递给函数,则无法在该函数中对其进行更改。


简而言之:如果您使用不可变的值,则很容易就可以对您的代码进行推理:每个人都会获得数据的唯一*副本,因此它无法处理并破坏代码的其他部分。想象一下,这使在多线程环境中工作变得容易得多!


注意1:根据您所做的操作,不变性可能会带来性能损失,但是Immutable.js之类的东西会尽可能地优化。


注2:在不太确定的情况下,您不确定Immutable.js和ES6的const含义完全不同。


在通常情况下,我可以将对象添加到数组中。在这种情况下我该如何实现?删除商店并重新创建?是不是将对象添加到数组中的开销较小?PS:如果该示例不是解释不变性的正确方法,请让我知道什么是正确的实际示例。


是的,您的新闻示例非常好,您的推理也完全正确:您不能只修改现有列表,因此需要创建一个新列表:


var originalItems = Immutable.List.of(1, 2, 3);

var newItems = originalItems.push(4, 5, 6);


查看完整回答
反对 回复 2020-02-03
  • 3 回答
  • 0 关注
  • 788 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信