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

时间:2014-04-11 16:40:09

标签: javascript dom

将某些DOM对象声明为命名空间中的全局JavaScript变量是不是一个好习惯?

这样的事情:

var MyNS = {};

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

1 个答案:

答案 0 :(得分:2)

需要考虑的一些事项:

1)在JavaScript中创建全局变量不是一个好习惯,每个全局变量实际上都是window全局对象的属性,该对象已经具有很多属性。这意味着,如果添加全局变量,可能会弄乱现有变量,或者某些其他代码可能会覆盖您的变量。

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

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

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

(function () { ... }());

您在此类函数中声明的所有变量将仅在该函数内可见,并且该函数将在中间执行,并且通过垃圾收集,您可以解决任何与DOM对象过多引用相关的性能问题,只是使用这个匿名函数。

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