我正在学习 JavaScript、它的作用域、命名空间和全局变量(以及如何不使用它们)。
我在下面有一个完整的例子来说明我的问题。我构建了一个命名空间“命名”JavascriptLearning,然后将一个客户函数添加到命名空间。它按预期工作,将 JavascriptLearning 对象/命名空间添加到全局对象,并将 Customer 函数添加到此命名空间。
在此之后,我创建了四个变量。 我很困惑为什么这四个变量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>