Какая функция возвращает другую функцию с параметрами, объявленными также как константы? - PullRequest
0 голосов
/ 12 сентября 2018

Я полностью потерян.Ниже приведен краткий код из статьи с учетом повторного выбора библиотеки:

const shopItemsSelector = state => state.shop.items
const taxPercentSelector = state => state.shop.taxPercent

const subtotalSelector = state => {
  const items = shopItems(state)
  return items => items.reduce((acc, item) => acc + item.value, 0)
}

const taxSelector = state => {
  const subtotal = subtotalSelector(state)
  const taxPercent = taxPercentSelector(state)
  return (subtotal, taxPercent) => subtotal * (taxPercent / 100)
}

export const totalSelector = state => {
  const subtotal = subtotalSelector(state)
  const tax = taxSelector(state)
  return (subtotal, tax) => ({ total: subtotal + tax })
}

Может кто-нибудь объяснить, что возвращает функция totalSelector ?

Я вижу, что она возвращает другую функцию с параметрами промежуточный итог и tax , но почему существуют объявленные константы с такими же именами и как они соответствуют параметрам возвращаемой функции

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

totalSelector() возвращает функцию, которая ожидает два параметра subtotal и tax.

this returned function возвращает object with the property total, которое рассчитывается через subtotal + tax

объявленные константы не имеют ничего общего с возвращаемой функцией.

Пожалуйста, объясните downvote:)

0 голосов
/ 12 сентября 2018

Может кто-нибудь объяснить, какую функцию totalSelector возвращает?

Почти наверняка не то, что автор хотел вернуть. : -)

Она возвращает функцию, которая при вызове с двумя аргументами возвращает объект со свойством total, которое является суммой двух переданных аргументов. Все в totalSelector до the * Строка 1012 * совершенно бессмысленна и игнорируется, потому что у автора есть shadowed константы subtotal и tax с параметрами в функции стрелки, которую она возвращает:

export const totalSelector = state => {
  const subtotal = subtotalSelector(state) // <=== These
  const tax = taxSelector(state)           // <=== constants
  //      vvvvvvvvvvvvv------------ are shadowed by these parameter declarations
  return (subtotal, tax) => ({ total: subtotal + tax })
  //                                  ^^^^^^^^^^^^^^ -- so this uses the parameters
}

То есть subtotal и tax в теле функции-стрелки - это параметры, а не константы.

Автор, вероятно, хотел сделать это:

export const totalSelector = state => {
  const subtotal = subtotalSelector(state)
  const tax = taxSelector(state)
  return () => ({ total: subtotal() + tax() })
  //     ^^                      ^^      ^^
}

... хотя трудно быть уверенным. Он принимает объект состояния и возвращает функцию, которая при вызове выберет промежуточную сумму и налог с этого вызова и вернет итог. Обратите внимание, что он не принимает никаких параметров, и вызывает функции, созданные с помощью subtotalSelector(state) и taxSelector(state).

subtotalSelector и taxSelector имеют ту же проблему.

...