返回函数期间创建的Javascript变量

时间:2016-03-06 20:27:16

标签: javascript function rest controller server

我有一个我不太了解的功能。它在这里:

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

2 个答案:

答案 0 :(得分:1)

responseWithResult()在您调用它时会返回一个函数。

当稍后调用返回的函数时,该调用者应该传递entity参数。由于关闭,该内部函数将可以访问resstatusCodeentity。调用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');