根据源码结合自己的理解写出的简单代码。
不知道redux是否是这个原理。
export default function (counter, defaultState){
let state = defaultState || counter(undefined, {})
let subscribe = []
return {
dispatch(action){
let newState = counter(state, action)
if (state === newState) return
state = newState
subscribe.forEach(fun=>fun(state))
},
getState(){
return state
},
subscribe(fun){
subscribe.push(fun)
}
}
}
这里确实是有闭包哦,你
return
出去的dispatch
,getState
,subscribe
方法都引用了变量state
,subcribe
,所以就形成了闭包,这两个变量不会被回收,会一直在内存里面。我也写了redux
和react-redux
的文章,给楼主参考:手写一个Redux,深入理解其原理
手写一个React-Redux,玩转React的Context API