带参数的函数返回函数

时间:2019-09-30 11:03:43

标签: javascript node.js

我正在尝试理解以下编码样式

class A {
  constructor () {
    this.app.use(somefunc(a, b)) 
  }

  const somefunc = (docStore, workspaced = true) => {
   return (req, res, next) => {
  // Do something 
  } 

}

在这里,有人可以解释一下我们的退货如何获得要求,要求和下一步吗?像我们如何通过?

调用函数时,我将a, b传递给someFunc,然后匿名函数如何接收(req, res, next)

有人可以解释执行顺序吗?

5 个答案:

答案 0 :(得分:2)

(req, res, next) => {
  // Do something 
  } 

这是一个匿名箭头函数,该函数可以接受任何参数。 return正在返回一个函数,参数用于该函数而不是return语句

答案 1 :(得分:1)

调用somefunc时,返回function作为结果。 在下面的代码中,您可以像函数一样调用anotherfunc

var anotherfunc = somefunc(a,b);

在您的代码中,您将此anotherfunc传递给函数use,因此use需要调用它时,应将其参数(req,res,next)传递给它。

实际上,当有人调用它时,它会获取其参数(req, res, next),并且可能已经在use函数体中的某个位置调用了它。

答案 2 :(得分:1)

  

在数学和计算机科学中,高阶函数是至少执行以下一项的函数:

     
      
  • 采用一个或多个函数作为参数(即过程参数)
  •   
  • 返回一个函数作为其结果。 (维基百科)
  •   

somefunc返回一个函数。就这么简单。

var func = somefunc(docStore, workspaced);
func(req, res, next); // now you pass the parameters

您也可以在一行somefunc(docStore, workspaced)(req, res, next);

中调用它

编辑:这里要注意的一件事是,可以在返回的函数中使用docStore和工作区。

答案 3 :(得分:1)

您的匿名函数返回一个函数,app.use调用它,现在使用箭头函数时,可以按以下两种方式链接它们,如果您以foo(bar)的形式链接,则将参数传递给第一个功能将进一步传递。

let arr = ['a', 'b', 'c'];
let test = (x, y, z) => console.log(x, y, z);
arr.map(test);
arr.map((e, i, array) => test(e, i, array))

答案 4 :(得分:0)

也许这是最简单的解释方法,例如:

这是一个函数adder。它允许您创建新的添加功能。

它接受参数a并返回一个新函数。返回的函数(闭包-可以访问其外部词法环境的函数)接受参数b,并且-在被调用时-返回a的和b

我们将调用adder(这是一个函数)的结果分配给addTwo。然后,我们使用参数(addTwo)调用b,该参数返回a + b的值。

function adder(a) {
  return function(b) {
    return a + b;
  }
}

const addTwo = adder(2);
const result = addTwo(2);
console.log(result);