JavaScript、そのスコープ、名前空間、およびグローバル変数 (およびそれらを使用しない方法) について学んでいます。
私の質問を説明する完全な例を以下に示します。JavascriptLearning という名前の名前空間を作成し、その名前空間に Customer 関数を追加します。期待どおりに動作し、JavascriptLearning オブジェクト/名前空間がグローバル オブジェクトに追加され、Customer 関数がこの名前空間に追加されます。
この後、4 つの変数を作成します。 なぜこれら 4 つの変数appName、test、cust1、notNewInstanceがグローバル スコープに追加されないのか、私は思っていたので混乱しています。
(Chromeでデバッグし、アラート呼び出しで実行の最後に「this」オブジェクトを表示することにより、それらがグローバル名前空間に追加されていないことを発見しました。)
<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>