3 回答

TA貢獻1803條經(jīng)驗 獲得超6個贊
問題是,為什么不變性如此重要?突變對象有什么問題?它不是使事情變得簡單嗎?
實際上,事實恰恰相反:可變性使事情變得更復雜,至少從長遠來看。是的,它使您的初始編碼更加容易,因為您可以隨心所欲地進行更改,但是當程序變大時,這將成為一個問題–如果更改了值,什么更改了?
當您使所有內容不變時,這意味著數(shù)據(jù)再也不會因意外而更改。您肯定知道,如果將值傳遞給函數(shù),則無法在該函數(shù)中對其進行更改。
簡而言之:如果您使用不可變的值,則很容易就可以對您的代碼進行推理:每個人都會獲得數(shù)據(jù)的唯一*副本,因此它無法處理并破壞代碼的其他部分。想象一下,這使在多線程環(huán)境中工作變得容易得多!
注意1:根據(jù)您所做的操作,不變性可能會帶來性能損失,但是Immutable.js之類的東西會盡可能地優(yōu)化。
注2:在不太確定的情況下,您不確定Immutable.js和ES6的const含義完全不同。
在通常情況下,我可以將對象添加到數(shù)組中。在這種情況下我該如何實現(xiàn)?刪除商店并重新創(chuàng)建?是不是將對象添加到數(shù)組中的開銷較???PS:如果該示例不是解釋不變性的正確方法,請讓我知道什么是正確的實際示例。
是的,您的新聞示例非常好,您的推理也完全正確:您不能只修改現(xiàn)有列表,因此需要創(chuàng)建一個新列表:
var originalItems = Immutable.List.of(1, 2, 3);
var newItems = originalItems.push(4, 5, 6);
添加回答
舉報