[英]Double parameters with require: var io = require('socket.io')(http);
我是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它改变类型,还是其他什么?
谢谢!
在JavaScript中,功能是一等公民 。 这意味着它可以由另一个函数返回。
请考虑以下简单示例来理解这一点:
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
对象作为参数立即调用。
如果您有一个库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库的特定部分,这可能很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.