我已經多次聽到這些詞彙。坦率地說,我認爲命名空間是一個保存標識符的環境(以及映射到它的唯一「值」)。上下文就像一個數據集,非常類似於映射類型。我對這些感到困惑。如果任何人都可以更清楚地描述這些術語,這將是很好的。上下文和命名空間有什麼區別?
回答
這可能取決於你正在考慮的語言有關,但是使用一些JavaScript爲例:
var FOO = {
bar:function(){
return this == FOO; //=> true
}
};
在這情況下,你可以說FOO是一個行爲像一個命名空間。儘管JavaScript沒有名稱空間的正式概念,但我們已經定義了一個對象並正在使用它來分隔一定的代碼。
上下文通常是運行某些內容的環境。在此示例中,功能塊函數具有由此關鍵字引用的上下文。當運行的功能,像這樣:
FOO.bar();
我們調用FOO對象的上下文中的函數,所以FOO被分配到這個。我們可以不同的上下文中運行代碼:
var BAZ={};
BAZ.bar = FOO.bar;
BAZ.bar();
這一次函數的上下文是BAZ,因此,返回值將是錯誤的。
因此,這兩個術語都定義了某種環境,但命名空間是一個固定的環境,而上下文可能會根據代碼的運行方式而改變。
我傾向於看它是這樣的:
命名空間是在其中發現有上下文項的容器。
例如。
想想房子。
每間臥室都有一張牀。假設有主臥室,兒童臥室和備用臥室。
這裏的名稱空間是臥室的名稱,例如Master,Child,Spare。
現在,主臥室有一張雙人牀,兒童臥室一張單人牀和備用房間一張摺疊牀。
的雙人牀只有主臥室內的情況下,單人牀僅在兒童臥室和空餘的房間內的摺疊牀。
現在,所有的臥室有傢俱的物品(牀,梳妝檯,大衣櫃),這些都是在傢俱空間中定義的。
如果所有房間參考/使用的傢俱命名空間,然後牀,梳妝檯,大衣櫃都內的客房有效的上下文,而是一張雙人牀不是孩子或空餘的房間內有效。
你當然可以把一張摺疊牀到兒童臥室在這種情況下,將有背景有,雖然這將是不同的上下文到的摺疊牀已經在空餘的房間。
如果你刪除一個房間(比如發生了火災),那麼有環境中它也將被銷燬例如傢俱主臥室發生火災將摧毀雙人牀,梳妝檯和衣櫃。
你說的關於Namespace
是正確的,我會解釋你在編程方式堂妹我不是一個理論的人。
namespace SampleNamespace
{
class foo
{
public void run()
{
console.writeline("RUN");
}
}
}
見上文命名空間SampleNamespace
包含類foo
,現在這裏的命名空間是一個環境和類是它的數據,所以另一個名字空間也可以包含類「富」,但相同的命名空間不能包含同一個類。名稱空間可以包含n個標識符,就像組織您的程序以避免使用同名的類一樣。
上下文:它與Namespace完全不同,它不是一個環境,但它爲對象定義了一個環境。所以,你可以說環境是屬性的集合定義對象的環境
嘿非常感謝:) – 0xc0de
Scope is often confusing in JavaScript - on the one hand,
它可能意味着在其下的東西被調用(或執行),並且對 另一方面它是在其下的東西被定義的對象的對象。 後者被稱爲詞法範圍,並被認爲是JavaScript中的真實範圍。詞彙範圍界定使得這種編程技術成爲閉包;作爲參考,請看看Richard Cornford撰寫的優秀文章 。
的範圍內調用過程中的想法被稱爲執行上下文中 的JavaScript
這從dojo documentation website 段落是對我有幫助。我認爲這是一個關於這個問題的好資源。
- 1. 沒有命名空間的「namespace :: fn」和「:: fn」有什麼區別?
- 2. 命名空間點命名空間和嵌套命名空間有什麼區別?
- 3. 在JavaScript中,對象和命名空間有什麼區別?
- 4. TCL命名空間和堆棧幀有什麼區別?
- 5. System.Windows.Point和System.Drawing.Point命名空間有什麼區別?
- 6. >和空間有什麼區別?
- 7. 這兩種命名空間方法有什麼區別?
- 8. 這些命名空間方法有什麼區別?
- 9. Spring-MVC:什麼是「上下文」和「命名空間」?
- 10. .net System.Drawing命名空間 - 位圖,圖像和圖形之間有什麼區別?
- 11. 命名空間,庫和頭文件之間的基本區別是什麼?
- 12. 服務上下文和對象上下文有什麼區別?
- 13. halo和mx命名空間的區別
- 14. 上鑄和下鑄有什麼區別?
- 15. android命名空間之間的區別
- 16. 實體框架命名空間 - 上下文命名空間
- 17. xtype和別名有什麼區別?
- 18. 「asynchronousFetchRequest」和「創建私有上下文」有什麼區別?
- 19. 命名實體識別和命名實體提取有什麼區別?
- 20. 將靜態常量和常量聲明爲未命名的命名空間有什麼區別?
- 21. ,「la」和「ld」命令有什麼區別?
- 22. mvn:deploy和mvn:install命令有什麼區別?
- 23. linux和unix命令有什麼區別?
- 24. '收縮空間緊湊'和'聚結'之間有什麼區別?
- 25. 空($ val)和!$ val有什麼區別?
- 26. perl中名稱空間,包和模塊之間有什麼區別?
- 27. 春天的父母上下文和子女上下文有什麼區別?
- 28. 應用程序和請求上下文有什麼區別?
- 29. 在AngularJS中,$ scope和本地上下文有什麼區別?
- 30. 中斷和異常上下文有什麼區別?
謝謝。你的描述性,現實生活中的例子和其他兩個程序化例子很好地解釋了這些概念。 – 0xc0de