繁体   English   中英

JavaScript vs Java中的全局命名空间

[英]Global Namespace in JavaScript vs Java

我碰到了这一行“在JavaScript中,所有代码共享一个全局名称空间”。 我想确认我的理解是否正确。

我的理解:

JAVA中

应用程序1->(具有一个称为变量)outputText =“ Morning”

应用程序2->(具有一个称为变量)outputText =“ Evening”

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

JAVASCRIPT中

应用程序1->(具有一个称为变量)outputText =“ Morning”

应用程序2->(具有一个称为变量)outputText =“ Evening”

由于它们共享相同的名称空间容器,因此Application1.outputText可以给出“晚上”。

我的理解正确吗?

谢谢

这取决于您对“应用程序”的含义,但是简短的答案是肯定的,这是正确的。

更长的答案是正常的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";
}

对于后两者,您将拥有独立的变量和不同的结果。

在Java中,没有这样的全局范围来声明您的变量。 一切都应该在类内部声明。 但是在JavaScript中情况有所不同。 在JavaScript中,我们有一个共享的全局范围。

JavaScript:

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

Java:

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'

在JavaScript中,您没有类,而只有函数(如果您来自Java,则与方法相同)。 本质上,您有一长串的相似功能,它们对应于一组特定的任务。 全局名称空间的想法是这些功能之外的区域。 因此,在函数内局部声明所有变量被认为是一种好习惯。 这样可以防止“污染”全局名称空间,即当一个项目中的多个人都在贡献代码时,就有可能使用相同的变量名称。 如果全局声明了多个同名变量,则可能导致代码出现问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM