哪个函数返回另一个参数也声明为常量的函数呢?

时间:2018-09-12 09:19:41

标签: javascript function redux closures reselect

我完全迷路了。以下是考虑重新选择库的article的简短代码:

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 返回的函数吗?

我看到它返回了另一个带有参数 subtotal tax 的函数,但是为什么有声明了相同名称的常量以及它们与返回函数的参数如何对应?

2 个答案:

答案 0 :(得分:2)

  

有人可以解释totalSelector返回什么函数吗?

几乎可以肯定不是作者要返回的意思。 :-)

它返回的是一个函数,当使用两个参数调用时,该函数返回一个对象,该对象带有一个total属性,该属性是传入的两个参数的总和。totalSelector中的所有内容 before < / em> return行是完全毫无意义的,因此会被忽略,因为作者已经遮盖了{em> {}和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有相同的问题。

答案 1 :(得分:0)

totalSelector()返回一个需要两个参数subtotaltax的函数。

returned function返回通过object with the property total计算的subtotal + tax

声明的常量与返回的函数无关。

请解释一下投票:)