我檢查在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