2010-12-01 46 views
0

我是看在node.js的一个视频,我看到了喇叭说,他更喜欢做的,而不是使用匿名回调此:使用工厂方法作为替代通过匿名函数

var server = Server.createServer(server.createReq(req,res)); 

我认为它也可以传递带有参数的命名函数,而不是带有闭包的匿名函数。

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

这是如何更好?我可以看到它更好,因为与createServer级别的关闭不同,createReq级别的关闭更受限制 - 它不会存储对其他不必要变量(非req,res)的引用。

而且正如发言人所说,我想这将有助于更好地在代码的不同部分之间可视化实现。

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

+0

我看不出任何优势。我的第一个猜测是作者是Java损坏的。匿名函数保持功能在词汇上更接近于上下文,便于阅读,而无需搜索代码。 – Javier 2010-12-01 05:46:01

回答

0

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

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

例如,也许是这样的未经检验的和不完整的例子:

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(); 
}; 

本例使用小匿名函数的data事件回调绑定回客户的具体情况,但所有其他功能被命名为。