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

时间:2010-12-01 05:35:35

标签: javascript callback node.js anonymous-function

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分: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事件回调绑定回Client的特定实例,但所有其他函数都已命名。