下面是來自節點url模塊源代碼片段。在定義有效之前如何使用函數?
var punycode = require('punycode');
var util = require('util');
exports.parse = urlParse;
exports.resolve = urlResolve;
exports.resolveObject = urlResolveObject;
exports.format = urlFormat;
exports.Url = Url;
function Url() {
this.protocol = null;
this.slashes = null;
this.auth = null;
this.host = null;
this.port = null;
this.hostname = null;
this.hash = null;
this.search = null;
this.query = null;
this.pathname = null;
this.path = null;
this.href = null;
}
正如您所看到的,'Url'在函數'Url'被定義之前使用。 據我所知這不是有效的JavaScript,但它工作正常。
有人能告訴我爲什麼這是好的嗎?爲什麼節點作家喜歡這個約定?
編輯:謝謝。我沒有理解'功能提升',因爲前一個標題是錯誤的問題,已修改。
功能declerations始終懸掛在JavaScript範圍的頂端,所以它是完全有效的。 – adeneo
http://designpepper.com/blog/drips/variable-and-function-hoisting ...如果它是無效的,沒有人會寫這樣的代碼。既然它有效,它必須是有效的。 –