" var app = require中的第二个括号是什么('表达')()"做?

时间:2014-03-18 10:10:51

标签: javascript node.js express

我在快递框架上很陌生。

我抬头看了一下Socket.io网站的快速入门,我在“使用Express 3 web框架”中看到了这个声明。并在代码片段的这一行

var app = require('express')()

第二个括号用于什么?

先谢谢

2 个答案:

答案 0 :(得分:5)

当你说

require('express')

它是this file,它被执行并导出createApplication函数。您可以像这样检查

console.log(require('express'));
// { [Function: createApplication]
//     mime: 
//      ...
console.log(typeof require('express'));
// function

它基本上是一个增加了其他数据的函数(由于函数是第一类对象,因此可以在JavaScript中使用)。因为require('express')实际上是一个函数,所以第二个()意味着我们正在调用该函数。

如果您想了解module.exportsexports的工作原理,请查看blog entry of mine

答案 1 :(得分:1)

Thefourtheye回答了你的问题,但这是一个简单的例子,说明正在发生的事情。

首先创建一个带有一个函数的文件x.js,如下所示。

// x.js
exports.x = function() {
    return "hello";
}

然后在另一个文件中要求此文件。

// main.js
var x = require('./x.js'); // x is reference to the function
var text = x();            // execute the function (text will be "hello")

替代方案,你可以写

// main.js
var text = require('./x.js')(); // You are executing the function immediately