這更像是一個理論問題,但我覺得必須有辦法做到這一點。生成唯一ID的純功能方法
我有一些JS組件,當它們被創建時,它們需要爲html元素分配一個唯一的id,這個元素還沒有被用在任何其他組件中。這是相當瑣碎正常:
let currentId = 0;
function getNextId() {
currentId += 1;
return currentId;
}
function MyComponent() {
this.id = getNextId();
// Code which uses id
}
let c1 = new MyComponent();
// c1.id === 1
let c2 = new MyComponent();
// c2.id === 2
我不知道是否有任何的方式來做到只使用純函數這種事情,因爲我試圖環繞一些更高級的純功能的想法我的頭。據我所知,這需要Monads或其他類似的東西來完成,但我不知道該怎麼做。
謝謝!
全局狀態由1模擬)通過國家作爲一個額外的參數每2)返回(可能更新的)狀態作爲附加的返回值,以及3)確保狀態的所有使用者都被正確排序,以便來自一個函數的更新狀態被傳遞給下一個函數。在Haskell中,這由「State」monad封裝。 – chepner
@chepner這已經是一個很好的答案。 – duplode
嘿@chepner!謝謝(你的)信息!你能提供一個StackOverflow的答案,也許這將顯示這個想法在實踐中使用我給上面的例子嗎?如果你這樣做,它會工作,我很樂意接受答案! –