我對JavaScript的命名空間有個疑問。命名空間的優點是什麼?我什麼時候可以使用命名空間?使用全局變量是不好的習慣嗎?Javascript中的命名空間
回答
將所有變量存儲在全局名稱空間中是一種不好的做法,主要是因爲您打開了名稱衝突。例如,如果您定義了一個名爲Foo
的函數,並且您導入了一個也定義了Foo
的JavaScript文件,則它們將發生衝突,並在調用時最終隱藏。
命名空間的優點類似於其他語言:
- 則可以順理成章地組代碼
- 你可以組織功能集成到更小的,可重複使用的塊
- 你能避免名稱衝突
- 您可以避免混淆全局命名空間(導致上述項反)
我相信你開始編寫JavaScript,任何時候,你應該避免將您的功能全局命名空間,並保持你的代碼在自己的名稱空間:
var MyLibrary = MyLibrary || {};
MyLibrary.x = function() { ... };
這是一個好習慣進入。
的雖然大家都知道正確的答案,這,我認爲你的答案是最清晰和最簡潔的。 +1 – BBagi 2013-04-22 17:08:52
@BBagi謝謝! – 2013-04-22 17:10:10
一般命名空間的好處是:
- 限制全球範圍內的污染和防止命名衝突
- 提供上下文的函數名(我們預計爲WindowUtils.getHeight不同的參數和結果和例如MenuUtils.getHeight)。
無論何時您構建任何重要大小或複雜度的項目,您都可以使用命名空間。
全局通常是一個問題,因爲它更容易命名不同文件之間的衝突和意外副作用。
如果可以避免使用全局變量總是不好的,因爲它會混淆無法控制的名稱空間。如果引入了新的插件,或者第二個程序員在您的代碼上工作,並且全局變量名稱被共享,那麼這可能很糟糕,您將會遇到非常不受歡迎且難以追蹤的錯誤。
通過使用你自己的命名空間,你可以將你的函數和變量分隔成一個獨特的,安全的小繭。 :D
var company = company || {} ;
company.doSomething = function() {
};
company.test = {};
company.test.submodule = {};
company.test.submodule.doSomething = function() {};
company.api = {};
company.api.submodule = {};
通常你應該避免定義全局變量。要獲得清晰的可維護代碼,請使用對象作爲名稱空間並避免污染全局名稱空間。
這也大大增強了默認的JS功能。如果您真的熱衷於此,請在您的項目中添加諸如require.js之類的內容,並且您將獲得非常好的Java類功能。
所以對於require.js,您的company.api和company.test可以放置在不同的文件中,並且需要對方,就像使用Java包進行import.test一樣。
命名空間是一種非常有效的做法。你得到:
- 可讀性(世界上最重要的!!)。
- 可維護性。
- 更快的調試。
- 更快的代碼升級/代碼交付。
- 延遲加載和縮小比較容易,可以使用大量工具。
- 邏輯和功能的高效劃分。
- 防止IE窗口與全局對象錯誤。
- 使團隊中的工作可能和愉快。
- 加快發展很多。大多數IDE將根據您的命名空間進行鍵入時索引和自動填充函數名稱等。
- 你可以有效地使用jsDoc標籤來記錄你的JavaScript代碼。
- 您可以避免與其他庫的衝突。
更快的升級?這是一個很好的列表,但我沒有得到那個 – 2013-04-22 17:19:08
- 1. Javascript命名空間
- 2. 的Javascript:命名空間
- 3. 命名空間變量 - javascript
- 4. JavaScript多個命名空間
- 5. 繼承命名空間javascript
- 6. Javascript命名空間衝突
- 7. Javascript和jquery命名空間
- 8. Javascript命名空間約定
- 9. 多個javascript命名空間?
- 10. 使用javascript命名空間
- 11. Javascript/AngularJS中的命名空間事件?
- 12. Javascript中的命名空間類
- 13. JavaScript:在命名空間內遍歷/瀏覽命名空間?
- 14. 在CoffeeScript/JavaScript中導入命名空間
- 15. 從匿名命名空間調用命名命名空間中的函數
- 16. 命名空間中不存在命名空間名稱'Notify'Twilio.Rest
- 17. 全局命名空間中的命名空間C#
- 18. 命名空間路線中的未命名空間路線
- 19. 關於javascript命名空間的問題
- 20. 的Javascript命名空間污染問題
- 21. JavaScript的命名空間架構
- 22. 結合JavaScript的onload命名空間
- 23. XMLNS命名空間的JavaScript刪除
- 24. JavaScript的命名空間字符串
- 25. JavaScript的命名空間聲明
- 26. 帶jQuery的JavaScript命名空間
- 27. 的Javascript包括命名空間
- 28. JavaScript的命名空間,並繼承
- 29. 重命名命名空間
- 30. 命名空間中的類
隔離,當你想要隔離的東西,通常是:) – 2013-04-22 17:05:02
重複http://stackoverflow.com/questions/4246284/why-are-globals-bad – 2013-04-22 17:08:05