es6箭头功能说明

时间:2017-09-18 20:41:13

标签: ecmascript-6 arrow-functions

{
  getter: {
    myThing: state => lookup => {
      return state.things[lookup];
    },
    myThings: state => {
      return state.things;
    }
  }
}

鉴于以上两个函数,以下是等效的吗?

{
  getter: {
    myThing: (state, lookup) => {
      return state.things[lookup];
    },
    myThings: (state) => {
      return state.things;
    }
  }
}

1 个答案:

答案 0 :(得分:2)

(state) => { ... }state => { ... }是等效的,因为括号在箭头函数中的单个参数周围是可选的。

state => lookup => { ... }(state, lookup) => { ... } 等效。

第一个表达式是一个函数,它接受一个参数并返回另一个函数,它还带有一个参数,而第二个表达式是一个带两个参数的函数。

a => b => {return a + b;}这样的表达式就是一个例子。你可以使用这两种变体:

const add = a => b => (a + b);
add(2)(3); // 5
add(2); // function add/<() // This refers to the `b => (a + b)` part
add(2, 3); // function add/<() // Like above, because the second argument is ignored

const add2 = (a, b) => (a + b);
add2(2)(3); // TypeError: add2(...) is not a function
add2(2); // NaN // b isn’t provided
add2(2, 3); // 5

(state) => (lookup) => { ... }等同于第一个表达式。

注意:(state) => (lookup) => { ... }需要明确的return才能返回值;省略大括号{ ... }不会。