【发布时间】:2023-03-08 03:45:01
【问题描述】:
我在试图向自己解释的在线课程中遇到一个问题。我理解“compose”函数/想法以更简单的格式做什么,但是当涉及到为函数工厂应用 reduce 并在每个函数上运行 compose 时,我似乎感到困惑。希望有经验的人可以更清楚地向我解释“return fns.reduce(compose)”行是怎么回事,以及它是如何一次实现这些功能的?一旦在底部调用函数,每个函数是否轮流成为“累加器”,然后是 reduce 中的“当前”?
const user = {
user: 'Jennnifer',
active: true,
cart: [],
purchases: []
}
const compose = (f, g) => (...args) => f(g(...args));
function purchaseItem(...fns){
return fns.reduce(compose)
// return Object.assign({}, user, {purchases: item})
}
//Receives a user, and the item
function addItemToCart(user, item){
//Create a variable and concat the empty cart of the user object to add the item to the cart key.
const updateCart = user.cart.concat(item);
return Object.assign({}, user, { cart: updateCart });
}
function applyTaxToItems(user){
const { cart } = user;
const taxRate = 1.3;
const updatedCart = cart.map(item => {
return {
name: item.name,
price: item.price * taxRate
}
})
return Object.assign({}, user, { cart: updatedCart})
}
function buyItem(user){
return user
}
function emptyCart(user){
return user
}
//Invoke Function:
console.log(purchaseItem
(
emptyCart,
buyItem,
applyTaxToItems,
addItemToCart
)(user, { name: 'Laptop', price: 200})
)
【问题讨论】:
标签: javascript ecmascript-6 reduce