JavaScript与Java中的全局命名空间

时间:2016-07-21 14:37:45

标签: javascript java namespaces

我遇到过这一行'在JavaScript中,所有代码都共享一个全局命名空间'。我想确认我的理解是否正确。

我的理解:

JAVA

申请1 - > (有一个名为的变量)outputText =“Morning”

申请2 - > (有一个名为的变量)outputText =“Evening”

由于这两个项目具有不同的内存分配,因此它们具有不同的命名空间容器,并且不存在变量混淆的危险。所以打印Application1.outputText给出“Morning”,Application2.outputText给出“Evening”。

JAVASCRIPT

申请1 - > (有一个名为的变量)outputText =“Morning”

申请2 - > (有一个名为的变量)outputText =“Evening”

由于它们共享相同的命名空间容器,因此Application1.outputText可能会给出“Evening”。

我的理解是否正确?

由于

3 个答案:

答案 0 :(得分:0)

这取决于“申请”的含义,但简短的回答是肯定的,这是正确的。

更长的答案是,正常的javascript“最佳做法”是仔细调整您的变量范围。因此,全局命名空间仅适用于未在函数(或自唤醒函数)中声明的变量/函数或对象属性。

这样的事情:

var outPutText = "morning";

然后在某个地方的另一个文件中......可能是写得不好的API:

var outPutText = "evening"; 

将包含执行时遇到的最后一个值。

我们在Javascript中所做的事情是:

var application1;
application1.outPutText = "morning";

以及其他地方:

var application2;
application2.outPutText = "evening";

或者,类似地,因为Javascript中的所有内容都是对象,包括函数:

function application1(){
    var outPutText = "morning";
}
function application2(){
    var outPutText = "evening";
}

对于后两者,你将有分离的变量和不同的结果。

答案 1 :(得分:0)

在Java中,没有这样的全局范围来声明你的变量。应该在课堂内宣布一切。但是在JavaScript中情况不同。在JavaScript中,我们有一个共享的全局范围。

JavaScript的:

<script>
    // here is global scope
    var a = 1;
</script>
<script>
    console.log(a); // prints '1'
</script>

爪哇:

public class App1{
    public static int a = 1;
}

public class App2{
    public static int a = 2;
}
...
// somewhere inside a method
App1.a // '1'
App2.a // '2'

答案 2 :(得分:0)

在JavaScript中,您没有类,只有函数(如果您来自Java,则与方法相同)。您基本上有一长页的类似功能,对应于一组特定的任务。全局名称空间的概念是这些函数之外的区域。因此,在函数中本地声明所有变量被认为是一种好习惯。这可以防止&#34;污染&#34;全局名称空间,这是当多个人在项目上工作的所有贡献代码时,有可能使用相同的变量名称。如果全局声明了多个同名变量,则可能会导致代码出现问题。

在Java中,您在类中声明所有变量,并且从不在它们之外,因此没有可以声明的全局空间。