繁体   English   中英

在 JavaScript 中,在没有默认参数的其他参数之前为某些参数定义具有默认参数的函数有什么意义?

[英]In JavaScript, what is the point of defining a function with default parameters for some arguments before other arguments without default parameters?

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

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

无论如何,在需要action时提供默认state什么意义?

在该特定代码示例中,在不提供action参数的情况下调用visibilityFilter TypeError将导致 switch 语句中出现TypeError

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

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

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

 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传递了一个初始状态,它将作为 reducer 的第一个参数传递给 reducer; 否则,Redux 的内部将使用undefined第一个参数显式调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM