如何理解立即返回另一个函数的函数

时间:2019-04-18 19:27:56

标签: javascript reactjs redux

I am confused by the following code.

Source
export const createProject = (project) => {
  return (dispatch, getState, {getFirestore}) => {
    // make async call to database
    const firestore = getFirestore();
    firestore.collection('projects').add({
      ...project,
      authorFirstName: 'Net',
      authorLastName: 'Ninja',
      authorId: 12345,
      createdAt: new Date()
    }).then(() => {
      dispatch({ type: 'CREATE_PROJECT_SUCCESS' });
    }).catch(err => {
      dispatch({ type: 'CREATE_PROJECT_ERROR' }, err);
    });
  }
};

我的问题是关于这一行的。

return (dispatch, getState, {getFirestore}) => {...

什么使这项工作?论据从何而来?什么叫他们?所有这些论点已经不在范围之内了吗?为什么我们需要createProject返回第二个函数? createProject返回第二个函数吗?还是立即调用内联函数?是什么触发return函数运行的?

我通常对此模式非常困惑。有人可以帮我分解一下吗?

2 个答案:

答案 0 :(得分:2)

从最简单的模式开始:

function outter(outterArg) {
  return function(innerArg) {
     console.log(outterArg, innerArg  )
  }
}
let retFunction = outter('outterValue')
// retFunction is that function returned from outter
// now call the retFunction
retFunction('innerValue')

// or call them on one line
outter('oneLineOutter')('oneLineInner')

答案 1 :(得分:1)

  

论点从哪里来?

就像其他函数一样,调用该函数时也会传入参数。

  

什么叫他们?

返回的函数在其他地方调用。在这种情况下,redux或react将调用您的createProject()函数并获取其返回值。然后它将使用适当的参数调用返回的函数。

  

为什么我们需要createProject返回第二个函数?

Redux充满了这种模式,您有一个函数可以返回另一个函数。

  

createProject返回第二个函数吗?

是的。

  

还是立即调用内联函数?

不,稍后再调用。

  

什么触发返回函数运行?

Redux最终调用返回的函数来运行它。