在JavaScript / jQuery中将DOM元素设置为全局变量是一种糟糕的编程习惯吗?

时间:2014-10-15 20:01:18

标签: javascript jquery html

例如,我有 HTML

<script src="test.js"></script>
<script>
$(document).ready(function() {
    initFields();
});
</script>

<input id="input" type="text">

我的 JS

var $input;

function initFields() {
    $input = document.getElementById("input"); //or $('#input) in jQuery
}

这样,我可以随时访问$input.value(例如提交表单或清理字段等),以便变量可重用。我的疑问是:将DOM元素设置为全局变量是不是一种错误的做法?

1 个答案:

答案 0 :(得分:3)

有时全局变量是不可避免的,但它们总是令人遗憾。我建议创建一个全局对象,并用你想要引用的DOM元素的引用填充它。

,例如,在全球范围内:

var $elements = {
    $input  : $('#input'),
    $header : $('#header'),
    // etc, etc
};

请记住,所有全局变量都只是window对象的属性。在javascript中创建全局变量的一个更大问题是,您可能会意外覆盖window上的属性,这可能会产生难以调试的严重后果。如果你只是定义一个全局变量(如本例所示),你可能不会遇到麻烦,但如果你为不同的DOM元素或其他任何东西定义了几十个变量,你的程序可能会很快变得难以维护,而且很难调试。