我是node和JS的新手,并且正在深入研究socket.io聊天示例(http://socket.io/get-started/chat/)。我在服务器中遇到了这段代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
我已经查看过其他教程,之前从未见过双括号。 (http)
部分做了什么?它是require的参数,doest更改类型还是别的什么?
谢谢!
答案 0 :(得分:9)
在JavaScript中,函数是First-class citizen。这意味着它可以被另一个函数返回。
请考虑以下简单示例来理解这一点:
var sum = function(a) {
return function(b) {
return a + b;
}
}
sum(3)(2); //5
//...or...
var func = sum(3);
func(2); //5
在您的示例中,require('socket.io')
返回另一个函数,该函数会以http
个对象作为参数立即调用。
答案 1 :(得分:1)
如果您有一个库http
并且它有一个导出的模块server
,则展开。
让我们说我们分开了这条线:
var http = require('http').Server(app);
分为两行:
var http = require(' http')
导入" http"模块库作为一个JSON对象进入http变量。这个模块库有一堆模块,您现在可以通过http var。
httpServer = http.Server(app)
这将使用您在上面调用的快速数据(构造函数的行类型)加载Server模块并将其放入httpServer var。
上面的区别在于,不是两个步骤,而是将它们压缩成一个,因此http中包含Server模块而不是整个http库。如果您只想使用http库的特定部分,这可能很有用。
答案 2 :(得分:0)