繁体   English   中英

带有require的双参数:var io = require('socket.io')(http);

[英]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);

分为两行:

  1. var http = require('http')

    将“http”模块库作为JSON对象导入http变量。 这个模块库有一堆模块,您现在可以通过http var调用它们来访问它们。

  2. httpServer = http.Server(app)

    这将使用您在上面调用的快速数据加载Server模块(类型为构造函数)并将其放入httpServer var中。

上面的区别是,它们不是将两个步骤压缩成一个,所以http在其中包含Server模块而不是整个http库。 如果您只想使用http库的特定部分,这可能很有用。

Nodejs允许您使用语句module.exports = something为导出的模块分配对象/函数。 因此,每个语句都导入一个库,然后运行分配给导出内容的函数。

举例来说, 这里是他们的出口快件的源代码createApplication功能。

这里的文章,他们进入一些详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM