Javascript 避免全局名称空间:概念性

Javascript 避免全局名称空间:概念性,javascript,performance,global-variables,Javascript,Performance,Global Variables,这是避免使用全局名称空间的另一个问题 对于我在私人时间工作的web应用程序,我需要许多在不同模块之间共享的对象实例。它是一个单页应用程序,几乎所有视图都基本上相互连接(MVC透视图) 我将我的应用程序命名为: window.app = { views : {}, models: {}, collections: {}, functions: {} }; 收藏的插图: 条形图轮廓信息可以表示为地图上的标记、列表中的项目或轮廓上显示的信息等。。。 所以我要做的

这是避免使用全局名称空间的另一个问题

对于我在私人时间工作的web应用程序,我需要许多在不同模块之间共享的对象实例。它是一个单页应用程序,几乎所有视图都基本上相互连接(MVC透视图)

我将我的应用程序命名为:

window.app = {
    views : {}, 
    models: {}, 
    collections: {}, 
    functions: {}
};
收藏的插图: 条形图轮廓信息可以表示为地图上的标记、列表中的项目或轮廓上显示的信息等。。。 所以我要做的是创建一个“bars_集合”的实例,并以这种方式将其添加到app对象中:

app.collections.bars_Collection = New Bar_Collection(); 
一次获取数据就可以使收集的数据在整个应用程序中都可用

视图的另一个示例:
我有一个视图对象,它有一个标签(关键字)列表,这些标签(关键字)是根据它被输入的集合更新的(跨类别->可以是酒吧、餐馆等)。因此,对于添加到app对象中的标记,我将使用单一视图,如下所示:

app.views.tags_View = new Tags_View(); 
虽然我并不真正害怕名称冲突,但我确实意识到我的应用程序对象驻留在全局名称空间中。在向全局应用程序对象添加更多嵌套对象时,我担心应用程序的性能:

不过,让这些实例(app.views、app.models等)随时都可以直接访问是非常方便的

我的问题是:你如何评估这种情况,如果你认为这个坏的话? 练习,你能给我一个实用的指针,告诉我什么是更好的方法吗


污染全局范围是不好的(即定义许多全局变量)。在全局范围(命名空间的根)中有一个变量是非常好的。这是一个很好的实践,我认为它不会对性能产生影响。您以前听说过/读过闭包,或者在您的例子中,特别是IIFEs吗?@Boldewyn我读过使用闭包如何帮助避免函数驻留在全局命名空间中。尽管如此,我还是不知道如何使用它们在整个应用程序中创建对象的共享实例。如果您有一些示例代码,说明如何使用iLife改进上面提供的代码,我将非常感兴趣。