Redux createStore源代码-增强程序递归的回调部分存在无限循环风险?

时间:2018-06-24 04:30:01

标签: javascript reactjs recursion redux callback

我目前正在使用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,

您如何分析此代码段?

谢谢

1 个答案:

答案 0 :(得分:1)

请注意,如果使用typeof preloadedState !== 'function' && typeof enhancer === 'undefined',该函数将执行其余操作。

然后,当我们调用enhancer(createStore)(reducer, preloadedState)时,EnhancedCreateStore将获得enhancer === 'undefined'

当我们仅在createStore(reducer, preloadedState)时调用preloadedState === 'function时,我们最终将调用EnhancedCreateStore(reducer,undefined,undefined)

这就是为什么它不会以无限循环结束的原因。