一尘不染

JavaScript全局变量不正确,应该使用哪种替代解决方案?

javascript

我到处都读到了全局变量不好的地方,应该使用替代方法。特别是在Javascript中,我应该选择哪种解决方案。

我想一个函数,当喂两个参数(functionglobalVariables(Variable,Value))看起来,如果在本地数组存在变量,如果它的值设置为Value,否则,VariableValue附加。如果在不带参数(functionglobalVariables())的情况下调用该函数,它将返回数组。也许如果仅使用一个参数(functionglobalVariables(Variable))触发函数,则它将返回Variable数组中的值。

你怎么看?我想听听您使用全局变量的替代解决方案和参数。

将如何使用 globalVariables();

function append(){
    globalVariables("variable1","value1"); //globalVariables() would append variable1 to it's local array.
};

function retrieve(){
    var localVariable1 = globalVariables("variable1"); //globalVariables() would return "value1".
};

function retrieveAll(){
    var localVariable1 = globalVariables(); //globalVariables() would return the globalVariable()'s entire, local [persistently stored between calls] array.
};

function set(){
    globalVariables("variable1","value2"); //globalVariables() would set variable1 to "value2".
};

这是单例模式BTW吗?

在这种特定情况下,一个函数可能会在某个时间点设置一个变量,而另一个函数(可能在用户提交表单时)就需要获取该变量。因此,第一个函数无法将变量作为参数传递给后一个函数,因为永远不会从第一个函数调用它。

谢谢,谢谢您的帮助!


阅读 511

收藏
2020-04-25

共1个答案

一尘不染

不鼓励在javascript中使用全局变量的主要原因是,在javascript中,所有代码都共享一个全局名称空间,而javascript也隐含了全局变量,即。在本地范围内未明确声明的变量将自动添加到全局名称空间。过于依赖全局变量可能导致同一页面上的各个脚本之间发生冲突。

减少全局变量的一种方法是使用YUI模块模式。基本思想是将所有代码包装在一个函数中,该函数返回一个对象,该对象包含需要在模块外部访问的函数,并将返回值分配给单个全局变量。

var FOO = (function() {
    var my_var = 10; //shared variable available only inside your module

    function bar() { // this function not available outside your module
        alert(my_var); // this function can access my_var
    }

    return {
        a_func: function() {
            alert(my_var); // this function can access my_var
        },
        b_func: function() {
            alert(my_var); // this function can also access my_var
        }
    };

})();

现在要在其他模块中使用函数,请使用FOO.a_func()。解决全局名称空间冲突的这种方法只需要更改的名称FOO

2020-04-25