我正在學習JavaScript,其範圍,名稱空間和全局變量(以及如何不使用它們)。爲什麼這些變量不在全球範圍內?
我有一個完整的例子,說明我的問題。我構建了一個名爲「JavascriptLearning」的名稱空間,然後將一個Customer函數添加到名稱空間。它按預期工作,將JavascriptLearning對象/名稱空間添加到全局對象,並將Customer函數添加到此名稱空間。
之後,我創建了四個變量。 我爲什麼這四個變量APPNAME,測試,cust1和notNewInstance沒有被添加到全球範圍,因爲我認爲他們會感到困惑。
(我發現,他們並沒有受到Chrome的調試,並在隨後結束執行觀看「這個」對象,在警告呼叫加入到全局命名空間。)
<html>
<head>
<script>
var JavascriptLearning = window.JavascriptLearning || {};
// Pass in the namespace
(function(nameSpace) {
// Uppercased because we are using this function as a "class".
nameSpace.Customer = function Customer(name, company) {
// Using this, we create a new object and add properties to it. Puts an object dynamically with a "shape"
this.name = name;
this.company = company;
// Without a return keyword, the return value would be undefined
return 0;
}
})(JavascriptLearning);
var appName = "Hello";
var test = function TEST() { return; }
// Assigning the new keyword is used to return an object as defined in the function.
var cust1 = new JavascriptLearning.Customer("Matt", "Company");
// Not using the new keyword simply uses the return value of the function
var notNewInstance = JavascriptLearning.Customer("Test", "Company");
this.alert(cust1.name + " " + cust1.company);
</script>
</head>
<body>
</body>
</html>
werks4me,我在Chrome 21中獲得了「Matt Company」。 – ken
@ken腳本運行成功,我問爲什麼我沒有在全局範圍內看到我的一些變量 – contactmatt
我看到全局範圍內的變量Chrome調試器...你確定你看到你認爲你在看什麼嗎? –