什么是双箭头函数?

What is double arrow function?

什么是 "let x= something1 => something2 => something3"?

我有这段代码,但我不明白它的作用。

const myReducers = {person, hoursWorked};
const combineReducers = reducers => (state = {}, action) => {
  return Object.keys(reducers).reduce((nextState, key) => {
    nextState[key] = reducers[key](state[key], action);
    return nextState;
  }, {});
};

您需要的完整代码:

//Redux-Style Reducer
const person = (state = {}, action) => {
  switch(action.type){
    case 'ADD_INFO':
      return Object.assign({}, state, action.payload)
    default:
      return state;
  }
}

const infoAction = {type: 'ADD_INFO', payload: {name: 'Brian', framework: 'Angular'}}
const anotherPersonInfo = person(undefined, infoAction);
console.log('***REDUX STYLE PERSON***: ', anotherPersonInfo);

//Add another reducer
const hoursWorked = (state = 0, action) => {
  switch(action.type){
    case 'ADD_HOUR':
      return state + 1;
    case 'SUBTRACT_HOUR':
      return state - 1;
    default:
      return state;
  }
}
//Combine Reducers Refresher

****HERE****
****HERE****
****HERE****

const myReducers = {person, hoursWorked};
const combineReducers = reducers => (state = {}, action) => {
  return Object.keys(reducers).reduce((nextState, key) => {
    nextState[key] = reducers[key](state[key], action);
    return nextState;
  }, {});
};


****
****


/*
This gets us most of the way there, but really want we want is for the value of firstState and secondState to accumulate
as actions are dispatched over time. Luckily, RxJS offers the perfect operator for this scenario., to be discussed in next lesson.
*/
const rootReducer = combineReducers(myReducers);
const firstState = rootReducer(undefined, {type: 'ADD_INFO', payload: {name: 'Brian'}});
const secondState = rootReducer({hoursWorked: 10, person: {name: 'Joe'}}, {type: 'ADD_HOUR'});
console.log('***FIRST STATE***:', firstState);
console.log('***SECOND STATE***:', secondState);

发件人:https://gist.github.com/btroncone/a6e4347326749f938510

箭头函数是

someParameters => someExpression

那么,什么是

someParameters => someThing => someThingElse

???

好吧,简单的愚蠢"pattern matching",这是一个箭头函数,它的主体(someExpression)是

someThing => someThingElse

换句话说,它是

someParameters => someOtherParameters => someExpression

这没什么特别的。函数是对象,它们可以从函数返回,无论这些函数是使用箭头还是 function 关键字编写的。

要正确阅读本文,您真正需要知道的唯一一件事是箭头是右结合的,IOW

a => b => c === a => (b => c)

注意:箭头函数也可以有一个由语句和单个表达式组成的函数体。我特别指的是 OP 混淆的形式。

let x= something1 => something2 => something3 几乎与以下内容相同:

let x = function (something) {
  return function (something2) {
    return something3
  }
}

唯一的区别是,箭头具有 this 的词法绑定,即在编译时绑定。