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

Javascript 带有require的双参数:var io=require(';socket.io';)(http);,javascript,node.js,socket.io,requirejs,Javascript,Node.js,Socket.io,Requirejs,我是node和JS的新手,一直在研究socket.io聊天示例()。我在服务器中遇到以下代码: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); 我看过其他教程,以前从未见过require后面的双括号。(http)部分做什么?它是require的一个参数,是改变了类型还是其他什么 谢谢 Nodejs允许您使用语句module.e

我是node和JS的新手,一直在研究socket.io聊天示例()。我在服务器中遇到以下代码:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
我看过其他教程,以前从未见过require后面的双括号。
(http)
部分做什么?它是require的一个参数,是改变了类型还是其他什么


谢谢

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

例如,是express的源代码,它们在其中导出
createApplication
函数


如果你有一个库
http
,并且它有一个导出的模块
服务器
,那么就可以展开

假设我们把这条线分开:

var http = require('http').Server(app);
分为两行:

  • var http=require('http')

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

  • httpServer=http.Server(应用程序)

    这将使用您在上面调用的express数据加载服务器模块(类似于一行构造函数),并将其放入httpServer变量中


  • 上面的不同之处在于,它们不是两个步骤,而是将其压缩为一个步骤,这样http中就有了服务器模块,而不是整个http库。如果您只想使用http库的特定部分,这可能非常有用。

    在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
    对象作为参数立即调用。

    非常好,谢谢。知道真正的名字也很有帮助。