我正在尝试理解以下编码样式
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)
有人可以解释执行顺序吗?
答案 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);