1 回答

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
他們是否在更改集合之前深度克隆集合,或者是否在對(duì)象的兩個(gè)版本之間實(shí)現(xiàn)某種結(jié)構(gòu)共享?
是的,他們使用結(jié)構(gòu)共享。
我們可以在這個(gè)例子中看到該c對(duì)象被重用,而不是克隆。這很有用,因?yàn)樗拇笮】赡芊浅4螅ㄔ谖业睦又兴麄€(gè)window對(duì)象?。?/p>
您可以想象嘗試深度克隆它會(huì)浪費(fèi)資源。
var fp = _.noConflict()
var data, updatedData
data = { a: { c: { window: window } } }
updatedData = fp.set(["a", "d"], 5, data)
console.log(updatedData.a.c === data.a.c)
<script src='https://cdn.jsdelivr.net/g/lodash@4.17(lodash.min.js+lodash.fp.min.js)'></script>
只有“父”對(duì)象被更改,因此必須克隆它們。不屬于突變一部分的葉子不需要改變。
在您的示例中,它出錯(cuò)的原因是因?yàn)槟M合了不可變和可變代碼,這不是一個(gè)好主意。如果您改變了預(yù)期不可變的代碼,這些克隆優(yōu)化顯然會(huì)出錯(cuò)。
添加回答
舉報(bào)