javascript es6双箭头函数
我想更好地理解es6箭头函数 给出以下示例:javascript es6双箭头函数,javascript,ecmascript-6,Javascript,Ecmascript 6,我想更好地理解es6箭头函数 给出以下示例: export default function applyMiddleware(...middlewares) { return (createStore) => (reducer, preloadedState, enhancer) => { // snip actual enhancer logic return { ...store,
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}
}
}
}
我的问题是:
你的第一个问题的答案差不多(见我的评论)。第二个问题的答案是,您看到的模式是使用and的组合。导出函数的原始参数被收集到一个名为“middleware”的数组中,返回的函数关闭该数组(即有权访问)。然后可以使用另一个参数“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)都为您实现了curry,而不是手动使用curry函数来实现。使用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.
这个答案适用于那些对双箭头功能仍有疑问的人。让我们深入研究一下
const doubleArrowFunc = param1 => param2 => {
console.log('param1', param1);
console.log('param2', param2);
}
如果你调用这个函数
const executeFunc = doubleArrowFunc('Hello');
如果您在控制台中打印executeFunc
,您将得到如下输出
ƒ (param2) {
console.log('param1', param1);
console.log('param2', param2);
}
executeFunc('World');
//And the output will be
param1 Hello
param2 World
这就像是一个半执行的代码。如果你想完全执行它,你必须这样做
ƒ (param2) {
console.log('param1', param1);
console.log('param2', param2);
}
executeFunc('World');
//And the output will be
param1 Hello
param2 World
如果你想要更多的理解。我可以执行相同的无箭头功能
function doubleArrowFunc(param1) {
return function innerFunction(param2) {
console.log('param1', param1);
console.log('param2', param2);
}
}
你会问什么?这不是数组参数的排列,而是将传递给该函数的参数聚集到一个数组中。很容易混淆,因为在函数调用(而不是定义)中应用于数组的同一个运算符具有相反的效果。为什么不通过babel运行此操作并查看输出?这回答了你的问题吗@不客气,当你第一次看到它们时,这些事情可能会很困难,但是一旦你习惯了它们,用没有良好支持的语言编写代码是很痛苦的。这个答案实际上更好地解释了外部函数返回内部函数的原因。