javascript es6双箭头功能

申克(S. Schenk):

我想更好地了解es6箭头功能。

给出以下示例:

    export default function applyMiddleware(...middlewares) {
      return (createStore) => (reducer, preloadedState, enhancer) => {
        // snip actual enhancer logic

        return {
            ...store,
            dispatch
        }
    }
}

用文字描述以上内容:

  1. 我们的导出函数(applyMiddleware)接受一个带有散布的数组参数。
  2. 然后applyMiddleware返回带有createStore参数的无名函数,这一次返回具有三个参数的另一无名函数。

因此,如果没有箭头,它将看起来像这样:

export default function applyMiddleware(...middlewares) {
  return function(createStore){
      return function(reducer,preloadedState,enhancer){
        //some logic

          return{...store,dispatch}
      }
    }
}

我的问题:

  1. 我对么?
  2. 我们在这里看到的常见用例/代码范例是什么?
贾里德·史密斯(Jared Smith):

您第一个问题的答案或多或少(请参阅我的评论)。第二个问题的答案是,您看到的模式是使用闭包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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章