Javascript 使用工厂方法作为传递匿名函数的替代方法

Javascript 使用工厂方法作为传递匿名函数的替代方法,javascript,callback,node.js,anonymous-function,Javascript,Callback,Node.js,Anonymous Function,我正在node.js上观看视频,我看到演讲者说,他更喜欢这样做,而不是使用匿名回拨: var server = Server.createServer(server.createReq(req,res)); 我认为传递带有参数的命名函数而不是带有闭包的匿名函数也很好 问题1:但是createReq的实现可能会返回一个匿名函数,不是吗 这怎么会更好?我可以看到它更好,因为与createServer级别的闭包不同,createReq级别的闭包包含得更多-它不会存储对其他不必要变量(non-req,

我正在node.js上观看视频,我看到演讲者说,他更喜欢这样做,而不是使用匿名回拨:

var server = Server.createServer(server.createReq(req,res));
我认为传递带有参数的命名函数而不是带有闭包的匿名函数也很好

问题1:但是createReq的实现可能会返回一个匿名函数,不是吗

这怎么会更好?我可以看到它更好,因为与
createServer
级别的闭包不同,
createReq
级别的闭包包含得更多-它不会存储对其他不必要变量(non-req,res)的引用

正如演讲者所说,我想这将有助于更好地可视化代码不同部分之间的关系


问题2:还有其他好处吗?

调用返回函数的函数的原因可能是您在同一进程中启动多个服务器,并且希望它们共享同一个请求处理程序

要记住的另一件事是,每个匿名函数都必须在堆上分配,因此会产生一些垃圾收集开销。通过使用命名函数而不是匿名函数,有时可以降低此成本

例如,可能类似以下未经测试且不完整的示例:

var server = Server.createServer(handleRequest);

function handleRequest(req, res) {
    new Client(req, res);
}

function Client(req, res) {
    this.req = req;
    this.res = res;

    this.body = "";
    req.on("data", function (chunk) {
        self.onData(chunk);
    });
}
Client.prototype.onData = function (chunk) {
    this.body += chunk.toString();
};

本例使用一个小型匿名函数将
数据
事件回调绑定到客户机的特定实例,但所有其他函数都已命名。

我看不出有任何优势。我的第一个猜测是作者是Java。匿名函数使功能在词汇上更接近上下文,便于阅读,而无需四处搜索代码。与第一行进行比较的替代方案是什么?我不知道Node.js。另一种方法是匿名回调-
Server.createServer(function(){/*use req and res here*/}