В JavaScript, какой смысл определять функцию с параметрами по умолчанию для некоторых аргументов перед другими аргументами без параметров по умолчанию? - PullRequest
1 голос
/ 07 марта 2020

Я читал документацию Redux, и что-то действительно смутило меня. Многие, если не все, примерные функции редуктора в документации имеют такой тип подписи:

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? Чего мне не хватает?

1 Ответ

2 голосов
/ 07 марта 2020

Это довольно странный код, но есть один случай, когда можно использовать параметр по умолчанию - если 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 такие вещи могут возникать "естественно" «потому что функция является редуктором, используется с createStore. Если createStore передано начальное состояние, оно будет передано редуктору в качестве первого аргумента редуктора; в противном случае внутренние компоненты Redux будут явно вызывать его с первым аргументом undefined.

...