我目前正在使用Redux.js。热爱阅读源代码,我立即开始研究Redux源代码。
阅读the createStore code时,我遇到了以下代码:
export default function createStore(reducer, preloadedState, enhancer) {
if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
enhancer = preloadedState
preloadedState = undefined
}
if (typeof enhancer !== 'undefined') {
if (typeof enhancer !== 'function') {
throw new Error('Expected the enhancer to be a function.')
}
return enhancer(createStore)(reducer, preloadedState)
}
createStore代码的此循环是否应以无限循环结束?递归地导致,增强器将自身称为createStore函数。因此,我在此样板中看到了两种情况: -要么因为未定义增强器,要么函数以错误结尾 -或所有的功能都很棒,并且该函数一次又一次返回createStore,
您如何分析此代码段?
谢谢
答案 0 :(得分:1)
请注意,如果使用typeof preloadedState !== 'function' && typeof enhancer === 'undefined'
,该函数将执行其余操作。
然后,当我们调用enhancer(createStore)(reducer, preloadedState)
时,EnhancedCreateStore将获得enhancer === 'undefined'
当我们仅在createStore(reducer, preloadedState)
时调用preloadedState === 'function
时,我们最终将调用EnhancedCreateStore(reducer,undefined,undefined)
这就是为什么它不会以无限循环结束的原因。