我检查在net.js的createServer()
功能:节点net.js服务器()
exports.createServer = function() {
return new Server(arguments[0], arguments[1]);
};
我检查服务器()函数的源代码在net.js,发现
function Server(/* [ options, ] listener */) {
if (!(this instanceof Server)) return new Server(arguments[0], arguments[1]);
events.EventEmitter.call(this);
var self = this;
// ......
}
当我们调用createServer()
函数时,该函数将调用new Server()
。并且在Server()
函数中,由于this
不是服务器的实例,因此它将再次调用new Server()
。基于我的理解,新的Server()函数会一直调用新的Server(),因此会陷入无限循环。有人能解释我在这里的错吗?
如果Quentin是正确的,那么if
声明永远不会是真的,因为在createServer()
函数中调用了new Server()
。
是的,我注意到有一个if语句。但是当我们没有服务器的实例时,我们将陷入无限循环。对? – Benson
错误。在'return'和'Server'之间有一个'new'(所以它会下降一级,然后if语句不再成立) – Quentin
我刚刚在net.js中发现'createServer()': 'exports.createServer = function(){ return new Server(arguments [0],arguments [1]); };'根据你的说明,'if'语句永远不会是真的,因为每当你创建一个服务器时,你会调用'new Server()',当它进入'Server()'函数时,'if'语句总是真正。 – Benson