亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么不變性在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 關注
  • 833 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號