Javascript传递参数:奇怪的语法

时间:2015-02-27 20:52:47

标签: javascript node.js

所以我开始研究javascript,来自.net背景我找到了以下代码:

File express.js:

var express = require('express');
module.exports = function() {
    var app = express();
    require('../app/routes/index.server.routes.js')(app);
    return app;
};

文件index.server.routes.js:

module.exports = function(app) {
    var index = require('../controllers/index.server.controller');
    app.get('/', index.render);
};

正如本书所解释的那样,index.server.routes.js具有此功能(app),而app是用于配置的快速对象(它正在配置' /'路径)。没关系。

我不明白的是以下语法:

require('../app/routes/index.server.routes.js')(app);

我的理解是他将app参数传递给index.server.routes.js模块,这个模块正在设置get。

但是,我可以解释一下这种语法是如何工作的吗?来自.net背景,在我看来是一个演员(非常奇怪和令人困惑)。

2 个答案:

答案 0 :(得分:1)

语法是调用函数的语法。 index.server.routes.js导出一个函数,因此可以调用它。认为它与:

相同
var routes = require('../app/routes/index.server.routes.js')
routes(app) // routes is a function

Express中常见的是将app实例作为一种显式依赖注入形式传递。

答案 1 :(得分:0)

这很简单。当您在Node.js中调用require时,Node将加​​载模块(文件),并返回通过module.exports属性导出的模块。在这种情况下,它导出了一个函数。

因此,require为您提供了一个函数,因此您可以通过将括号放在require语句之后立即调用它。

代码相当于这样做:

var routesFn = require('../app/routes/index.server.routes.js')
routesFn(app)