[英]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.