javascript - 在 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
参数的调用将导致在TypeError
switch 语句中。
但是为了提供action
参数,state
还必须提供参数,因此默认值被覆盖且无用。据我所知,JavaScript 语法中根本无法在仅提供参数visiblityFilter
的情况下调用该函数。action
这只是 Redux 世界中一些时髦/糟糕的编码风格吗?我错过了什么?
解决方案
这是一些非常奇怪的代码,但有一种情况可以使用默认参数 - 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
第一个参数显式调用它。
推荐阅读
- javascript - 检查对象数组是否存在
- google-apps-script - 每当脚本运行时,如何更改 onEdit 函数?- 谷歌表格
- android - 启动对话框时如何显示键盘?
- go - 为什么 context.Context 信号会影响新的 goroutine?
- node.js - 如何在每次刷新页面时验证会话 cookie 的完整性,应该这样做吗?
- pandas - 熊猫石斑鱼缺少时间步长
- node.js - Node.js 连接到 Squelize
- javascript - 如何将时间值从一个文本框设置到另一个邪恶的时间选择器?
- java - 如何在java中使用*拆分字符串?
- java - 使用java流影响一些逻辑列表