为了避免创建全局变量,可以将所有变量分配给一个对象吗

Is it ok to assign all variables to an object for a way to avoid creating global variables?

本文关键字:变量 分配 一个对象 创建 全局变量      更新时间:2023-09-26

1。例如,如果我在声明变量之前定义了一个对象,然后将它们作为对象的一部分调用,如下所示。。。

//Global object
var Global = [];
//Every var thereafter ...
Global.variable1 = some value;
Global.variable2 = some value;
Global.variable3 = some value;**

是的,这被称为namespacing。它创建一个全局(可能应该有一个比您使用的更唯一的名称),然后将您的所有全局状态作为一个属性放在该全局上。

这是一种被广泛使用和推荐的做法,由jQuery等库使用,这些库被设计为与许多其他代码兼容(可能有自己的全局)。这种做法限制了您自己的全局变量的使用,从而减少了与其他代码冲突的机会。

您通常会将单个全局设置为Object,而不是像以下这样的数组:

var myGlobal = {};
myGlobal.prop1 = "whatever";

还有其他方法可以通过使用闭包来封闭代码和状态来限制真正全局的变量数量。这是您提出的namespacing的替代技术。

它是这样工作的:

(function() {
    var variable1 = some value;
    var variable2 = some value;
    var variable3 = some value;
    // all your code here that uses variable1, variable2 and variable3
})();

这些变量实际上是立即调用的函数表达式的局部变量(缩写为IIFE,它本质上只是一个匿名函数,为了创建具有私有变量的函数范围而立即执行)。

因为所有的代码都在同一个函数范围内,所以它们就像代码的全局变量一样工作,而实际上并不是全局变量。其他代码不能与这些变量冲突或访问这些变量,因此它也实现了隐私。

这是人们使用立即调用函数表达式(IIFE)的原因之一。通过将代码放入一个调用自身的匿名函数中,您不必担心变量会污染全局命名空间。

它看起来像这样:

(function() {
    var variable1 = 'some value'; // This variable is not global
    var variable2 = 'some value'; // This variable is not global
    var variable3 = 'some value'; // This variable is not global
})();