我有一个我不太了解的功能。它在这里:
function responseWithResult(res, statusCode) {
statusCode = statusCode || 200;
return function(entity) {
if (entity) {
res.status(statusCode).json(entity);
}
};
}
这个函数传递res和statusCode变量,但是一旦返回它似乎创建了这个实体变量。实体变量不是在这个函数之外的任何地方创建的,那么它是如何在这里创建的?对于完整范围,使用它的项目在这里:
https://github.com/angular-fullstack/generator-angular-fullstack
答案 0 :(得分:1)
responseWithResult()
在您调用它时会返回一个函数。
当稍后调用返回的函数时,该调用者应该传递entity
参数。由于关闭,该内部函数将可以访问res
,statusCode
和entity
。调用responseWithResult()
时,前两个作为参数传递。在调用返回的函数时,最后一个作为参数传递。
所以,这将使用如下:
var fn = responseWithResult(res, someStatus);
// then some time later
fn(someEntityValue);
答案 1 :(得分:0)
调用responseWithResult返回一个接受实体作为参数的函数。实体不是在函数外部创建的,它是分配给参数的变量名,调用返回的函数。
这样做的原因是因为返回的函数可以通过闭包访问statusCode和res。
您可以这样调用此函数:
responseWithResult('foo', 'bar')('baz');
或者像这样:
var fn = responseWithResult('foo', 'bar');
fn('baz');