在JavaScript中使用全局引用是一种好习惯吗?

NSF*_*NSF 0 javascript

例如,javascript代码是:

function a() {  
    this.Foo = function() {//...}
}  
Run Code Online (Sandbox Code Playgroud)

我通常做的是创建一个全局引用:

_a = new a();
Run Code Online (Sandbox Code Playgroud)

然后在身体或其他脚本区域中的任何地方使用它:

_a.Foo()
Run Code Online (Sandbox Code Playgroud)

这是好事还是坏事?或者有更好/更专业的方式来做到这一点?

McG*_*gle 5

一般来说,Javascript开发人员试图避免这种情况,因为不同的库可能会在全局范围内相互冲突.为避免这种情况,请考虑(如果可能)使用所谓的闭包为您的变量创建一个私有作用域.看起来像这样:

(function() {
    _a = new a();
})();
Run Code Online (Sandbox Code Playgroud)

内部函数内部声明的所有内容对于其外部的代码都是不可见的.

如果由于某种原因无法使用闭包,那么另一种方法是为变量创建一个"命名空间".

var MyCompany = { };
MyCompany.MyLibrary = { };
MyCompany.MyLibrary._a = new a();
Run Code Online (Sandbox Code Playgroud)

这样,您就可以将代码限制为获取单个全局名称(MyCompany),其他变量和方法驻留在该命名空间内.