代码之家  ›  专栏  ›  技术社区  ›  Webwoman

redux createstore源代码-增强器递归回调部分存在无限循环风险?

  •  0
  • Webwoman  · 技术社区  · 6 年前

    我现在在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 回复  |  直到 6 年前
        1
  •  1
  •   dancerphil    6 年前

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

    然后,当我们打电话 enhancer(createStore)(reducer, preloadedState) ,EnhancedCreateStore获取 enhancer === 'undefined'

    当我们打电话 createStore(reducer, preloadedState) 如果且仅当 preloadedState === 'function ,我们最终将调用enhancedCreateStore(reducer,undefined,undefined)

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