将某些DOM对象声明为命名空间中的全局JavaScript变量是不是一个好习惯?
这样的事情:
var MyNS = {};
$(document).ready(function(){
MyNS.domObject1 = $('#id1');
MyNS.domObject2 = $('#id2');
});
答案 0 :(得分:2)
需要考虑的一些事项:
1)在JavaScript中创建全局变量不是一个好习惯,每个全局变量实际上都是window
全局对象的属性,该对象已经具有很多属性。这意味着,如果添加全局变量,可能会弄乱现有变量,或者某些其他代码可能会覆盖您的变量。
解决方案:将您需要的所有全局变量存储在单个对象上,并确保该页面中的其他任何内容都不会使用该对象。或者根本不使用全局变量。
2)如果您已经可以使用ID访问这些元素,为什么还需要全局存储这些元素?即使你想在某个地方有一个直接引用,你也可以将它们存储为$(document).ready
函数的变量,并且它们对于在那里声明的所有函数都是可见的。
3)为了完全防止使用全局变量,您可以巧妙地将代码包装在匿名自动执行函数中,如下所示:
(function () { ... }());
您在此类函数中声明的所有变量将仅在该函数内可见,并且该函数将在中间执行,并且通过垃圾收集,您可以解决任何与DOM对象过多引用相关的性能问题,只是使用这个匿名函数。
4)如果一切都失败了,那么是的,你通过将所有元素存储在一个对象中来做出正确的决定,而不是为每个元素创建一个全局变量。