Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免全局变量意味着必须在不同的函数中声明相同的变量?_Javascript - Fatal编程技术网

Javascript 避免全局变量意味着必须在不同的函数中声明相同的变量?

Javascript 避免全局变量意味着必须在不同的函数中声明相同的变量?,javascript,Javascript,作为一个初学者,我被告知要避免全局变量 随着项目的发展,名称可能会发生特别的冲突。但也有人告诉我 编码是关于效率的,你不应该做两次。 避免使用全局变量会使我声明相同的变量 在不同的功能中,这感觉是错误的。 怎么走?谢谢你,和平与爱 //GLOBAL SPACE - no variables here, wanna be a good boy function one(){ var box = document.getElementsById('box'); //DO SOMET

作为一个初学者,我被告知要避免全局变量 随着项目的发展,名称可能会发生特别的冲突。但也有人告诉我 编码是关于效率的,你不应该做两次。 避免使用全局变量会使我声明相同的变量 在不同的功能中,这感觉是错误的。 怎么走?谢谢你,和平与爱

//GLOBAL SPACE - no variables here, wanna be a good boy

function one(){
    var box = document.getElementsById('box');
    //DO SOMETHING WITH BOX
}

function two(){
    var box = document.getElementsById('box');
    //DO SOMETHING ELSE WITH BOX

}

这实际上取决于如何访问
one
two
。但是,您可以始终关闭box变量,如下所示:

var one,two;
(function(){
    var box = document.getElementById('box');
    one = function(){
        //use box
    };
    two = function(){
        //use box
    };
})()

重新声明函数以接受参数

function one(box){
    //DO SOMETHING WITH BOX
}

这还有一个优点,就是只将长方体的位置移动到一个位置。声明或它自己的函数。这同样意味着,如果您更改如何定位box元素,则不必在所有使用它的方法中更改它,而只需在一个位置进行更改。

JavaScript严重依赖于。全局命名空间中的函数也是闭包。使用OOP方法(关于OOP)或(如注释中所述)模式。编程的圣杯是抽象的(除非你考虑零和更优雅),而OOP封装是主要的方法之一。例如:

var my_object = {
    box: document.getElementsById('box'),
    one: function() { }, // manipulate this.box
    two: function() { }, // manipulate this.box
};

如果您了解javascript中的名称空间模式,可以最大限度地减少冲突:这可以帮助您避免重复缓存同一变量,并将代码保存在组中。在您的特定情况下,您可以将代码包装在一个匿名函数中并定义(如果合理,还可以进行初始化)您的共同变数。感谢大家为世界上最好的客户服务。我现在明白了,没有一个魔术,只有一些不同的方法和解决办法。在我的例子中,匿名函数应该有相当长的路要走。