声明为JavaScript全局变量的DOM对象

声明为JavaScript全局变量的DOM对象,javascript,dom,Javascript,Dom,将某些DOM对象声明为命名空间中的全局JavaScript变量是否是一种好的做法 大概是这样的: var MyNS = {}; $(document).ready(function(){ MyNS.domObject1 = $('#id1'); MyNS.domObject2 = $('#id2'); }); 需要考虑的一些事项: 1)在JavaScript中创建全局变量不是一个好的做法,每个全局变量实际上都是窗口全局对象的属性,该对象已经有很多属性。这意味着,如果您添加全局

将某些DOM对象声明为命名空间中的全局JavaScript变量是否是一种好的做法

大概是这样的:

var MyNS = {};

$(document).ready(function(){
    MyNS.domObject1 = $('#id1');
    MyNS.domObject2 = $('#id2');
});

需要考虑的一些事项:

1)在JavaScript中创建全局变量不是一个好的做法,每个全局变量实际上都是
窗口
全局对象的属性,该对象已经有很多属性。这意味着,如果您添加全局变量,可能会与现有变量发生冲突,或者其他一些代码可能会覆盖您的变量

解决方法:将您需要的所有全局变量存储在单个对象上,并确保页面中的其他任何内容都不会使用该对象。或者根本不使用全局变量

2)如果您已经可以使用ID访问这些元素,为什么需要全局存储这些元素?即使您希望在某个地方有一个直接引用,您也可以将它们存储为
$(document).ready
函数的变量,并且它们将对其中声明的所有te函数可见

3)要完全防止使用全局变量,您可以将代码巧妙地包装在匿名自动可执行函数中,如以下函数:

(function () { ... }());
您在这类函数中声明的所有变量将仅在该函数中可见,并且该函数将在中间执行,通过垃圾收集,您可以解决任何性能问题,只要使用此匿名函数,就会导致对DOM对象的引用过多


4)如果所有这些都失败了,那么是的,通过将所有元素存储在一个对象中,而不是为每个元素创建一个全局变量,您做出了正确的决定。

通常,您缓存DOM引用以编写更快的代码。但是,在名称空间中保存一组DOM引用可能会因为保留对不需要保留在内存中的内容的引用而降低速度。通常,您将仅在方法/函数中缓存DOM引用,以允许垃圾收集正常进行。