Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中处理大量全局变量_Javascript_Global Variables_Global - Fatal编程技术网

在JavaScript中处理大量全局变量

在JavaScript中处理大量全局变量,javascript,global-variables,global,Javascript,Global Variables,Global,我有一个JavaScript应用程序,它使用了大量全局变量(比如,几百个全局变量——它是C程序的一个端口,所以我没有这样编写)。显然,在窗口对象中有这么多变量是非常糟糕的做法,但我正在努力想出一种不冗长的方法来实现这一点。 目前我认为这是前进的方向: var myApp = {}; //file1.js: myApp.variables = (function() { var var1, var2, var3; var items = new exampleConstructo

我有一个JavaScript应用程序,它使用了大量全局变量(比如,几百个全局变量——它是C程序的一个端口,所以我没有这样编写)。显然,在窗口对象中有这么多变量是非常糟糕的做法,但我正在努力想出一种不冗长的方法来实现这一点。
目前我认为这是前进的方向:

var myApp = {};

//file1.js:
myApp.variables = (function() {
    var var1, var2, var3;
    var items = new exampleConstructorFunction();
    var etcereta = [];
})();

//file2.js:
myApp.gameplay = (function() {
    //gameplay code
})();

//file3.js:
myApp.scheduling = (function() {
    //timing code
})();

但问题是,为了从
gameplay
timing
中定义的函数中访问
myApp.variables
中的任何变量,您需要将其指定为
myApp.variables.var1
,当您需要经常使用它们时,这对可读性非常不利。有什么建议吗?

您可以直接在myApp中存储当前的全局变量,也可以避免这种方法,将整个脚本包装在一个匿名函数中,然后像
(function(){})()一样执行它
那么您就不需要为变量命名名称以使其不在全局范围内。

您可以直接将当前全局变量存储在myApp中,或者您可以避免这种方法,将整个脚本包装在匿名函数中并执行它-就像
(function(){})()
那么您就不需要为变量命名名称空间以使其不在全局范围内。

如果您只关心变量名的长度,您就不能在局部范围内定义对它的引用吗

var v = myApp.variables;

如果您只关心变量名的长度,那么您就不能在局部范围中定义对它的引用吗

var v = myApp.variables;


我使用ASP、Windows server、MS SQL DB,但这也可以在PHP、基于Linux的服务器和MySQL DB中完成。您需要创建一个或多个数据库,然后编写一个ASP脚本(或PHP脚本)将变量的值存储在数据库中,然后(再次使用ASP/PHP脚本)调用/使用它们。这不是一个简单的脚本编写任务,但是ASP(PHP论坛)中有很多可以修改的示例。一旦编写了脚本并存储在服务器端数据库中,就可以重新使用、修订。可以保存许多数据字段和值。HTH

我使用ASP、Windows server、MS SQL DB,但这也可以在PHP、基于Linux的服务器和MySQL DB中完成。您需要创建一个或多个数据库,然后编写一个ASP脚本(或PHP脚本)将变量的值存储在数据库中,然后(再次使用ASP/PHP脚本)调用/使用它们。这不是一个简单的脚本编写任务,但是ASP(PHP论坛)中有很多可以修改的示例。一旦编写了脚本并存储在服务器端数据库中,就可以重新使用、修订。可以保存许多数据字段和值。HTH

但是对于每个变量,您仍然必须编写
v.varname
,而不仅仅是
varname
是的,但是您保留了一个名称空间。如果您意外地声明
var varname='foo'
在函数中,它不会与
v.varname
冲突。我想这取决于用例,但是。。如果varname打算首先是全球性的,那么这不是再次声明varname的“正确”行为吗?我不确定我是否100%遵循您的建议。我认为如果你不需要myApp对象,你应该使用@jQuerrocks响应来使用iLife。您将拥有所有“全局”变量,而不必污染全局变量空间。我只是读了这篇文章来提高速度:但是对于每个变量,您仍然必须编写
v.varname
,而不仅仅是
varname
是的,但是您保留了一个名称空间。如果您意外地声明
var varname='foo'
在函数中,它不会与
v.varname
冲突。我想这取决于用例,但是。。如果varname打算首先是全球性的,那么这不是再次声明varname的“正确”行为吗?我不确定我是否100%遵循您的建议。我认为如果你不需要myApp对象,你应该使用@jQuerrocks响应来使用iLife。您将拥有所有“全局”变量,而不必污染全局变量空间。我读这篇文章只是为了跟上进度:这听起来是一个很好的解决方案。我看到的唯一问题是,如果您想维护一个名称空间,以防止“数百”个全局变量与您在函数中声明的变量发生冲突。@dan_paul—这个问题已经存在(并且可能已经克服),使用IIFE并不会使它变得更糟。它只是将问题从全局转移到函数上下文,而这正是OP想要的。这将使它们成为myApp对象的属性,不是吗?据我所知,对象属性无法访问其他对象属性(这可能是错误的?)。我曾考虑合并整个脚本,但它相当大(因此调试不会很有趣),而且它分离得非常好,因此看起来更干净,可以保留它们namespaced@jqueryrocks同意@jqueryrocs——这是有道理的。我是在回应你建议的第一部分(将全局数据直接存储在
myApp
)。如果您不需要myApp对象,IIFE肯定可以避免全局命名空间污染。我假设OP可能需要这个对象(看起来他们可能正在使用一个框架)。这听起来是一个不错的解决方案。我看到的唯一问题是,如果您想维护一个名称空间,以防止“数百”个全局变量与您在函数中声明的变量发生冲突。@dan_paul—这个问题已经存在(并且可能已经克服),使用IIFE并不会使它变得更糟。它只是将问题从全局转移到函数上下文,而这正是OP想要的。这将使它们成为myApp对象的属性,不是吗?据我所知,对象属性无法访问其他对象属性(这可能是错误的?)。我曾考虑合并整个脚本,但它相当大(因此调试不会很有趣),而且它分离得非常好,因此看起来更干净,可以保留它们namespaced@jqueryrocks同意@JQUERROCS-那是mak