首页 > 解决方案 > 在 JavaScript 中,在没有默认参数的其他参数之前为某些参数定义具有默认参数的函数有什么意义?

问题描述

我正在阅读 Redux 文档,有些事情让我很困惑。文档中的许多(如果不是全部)示例 reducer 函数都具有这种签名:

function visibilityFilter(state = 'SHOW_ALL', action) {
  switch (action.type) {
    case 'SET_VISIBILITY_FILTER':
      return action.filter
    default:
      return state
  }
}

无论如何都需要提供默认值有state什么意义action

在那个特定的代码示例中,visibilityFilter不提供action参数的调用将导致在TypeErrorswitch 语句中。

但是为了提供action参数,state还必须提供参数,因此默认值被覆盖且无用。据我所知,JavaScript 语法中根本无法在仅提供参数visiblityFilter的情况下调用该函数。action

这只是 Redux 世界中一些时髦/糟糕的编码风格吗?我错过了什么?

标签: javascriptfunctionsyntaxcoding-style

解决方案


这是一些非常奇怪的代码,但有一种情况可以使用默认参数 - ifundefined作为第一个参数显式传递:

function visibilityFilter(state = 'SHOW_ALL', action) {
  switch (action.type) {
    case 'SET_VISIBILITY_FILTER':
      return action.filter
    default:
      return state
  }
}

console.log(visibilityFilter(undefined, {}));

(并不是说我建议在大多数情况下编写看起来像这样的代码)

特别是对于 Redux,这种事情可能会“自然”出现,因为该函数是一个 reducer,与createStore. 如果createStore传递了一个初始状态,它将作为减速器的第一个参数传递给减速器;否则,Redux 的内部将使用undefined第一个参数显式调用它。


推荐阅读