我想更好地了解es6箭头功能。
给出以下示例:
export default function applyMiddleware(...middlewares) {
return (createStore) => (reducer, preloadedState, enhancer) => {
// snip actual enhancer logic
return {
...store,
dispatch
}
}
}
用文字描述以上内容:
因此,如果没有箭头,它将看起来像这样:
export default function applyMiddleware(...middlewares) {
return function(createStore){
return function(reducer,preloadedState,enhancer){
//some logic
return{...store,dispatch}
}
}
}
我的问题:
您第一个问题的答案或多或少(请参阅我的评论)。第二个问题的答案是,您看到的模式是使用闭包和currying的组合。导出函数的原始参数被收集到称为“中间件”的数组中,返回的函数将关闭(即可以访问)。然后可以使用另一个参数“ createStore”再次调用该函数,然后返回另一个可以接受更多参数的函数。这允许部分地应用参数。对于一个更简单(也许更容易理解)的示例,让我们使用一个名为“ add”的函数,该函数将两个数字相加:
let add = (x, y) => x + y;
不太有趣。但是让我们对其进行分解,以便它可以采用第一个数字并返回采用第二个数字的函数:
let add = x => y => x + y;
let add3 = add(3);
let seven = add3(4); // 7
对于我们的add函数来说,这似乎并不是一个大的胜利,但是您从一个更合理的实际示例开始。此外,许多流行的库(lodash,下划线,ramda)可以为您实现咖喱,而不是手动进行咖喱,而可以使用(并希望)使用为您实现的咖喱功能。使用Ramda的示例:
let add = R.curry((x, y) => x + y);
let add3 = add(3);
let five = add3(2);
let also5 = add(3, 2);
let still5 = add(3)(2); // all are equivalent.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句