为了账号安全,请及时绑定邮箱和手机立即绑定

我听说全局变量不好,我应该使用什么替代方案?

我听说全局变量不好,我应该使用什么替代方案?

慕村9548890 2019-06-21 17:37:04
我听说全局变量不好,我应该使用什么替代方案?我读遍了所有的地方全局变量不好而且应该使用其他方法。特别是在Javascript中,我应该选择什么样的解决方案。我在想一个函数,当给出两个论点时function globalVariables(Variable,Value))查看本地数组中是否存在变量,如果它确实将其值设置为Value否则,Variable和Value都是附加的。如果函数是在没有参数的情况下调用的(function globalVariables())返回数组。如果函数只使用一个参数触发(function globalVariables(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".};这是一个单例模式顺便说一句?在这个特定的场景中,一个函数可能在某个时间点设置一个变量,而稍后另一个函数(可能在用户提交表单时)需要得到该变量。因此,第一个函数不能将变量作为参数传递给后一个函数,因为从第一个函数开始就不会调用它。谢谢你,谢谢你的帮助!
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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.


查看完整回答
反对 回复 2019-06-21
?
交互式爱情

TA贡献1712条经验 获得超3个赞

全球状态在几个方面造成了问题。一个是代码重用。当您访问某种全局状态时,这意味着组件必须知道它的环境(它本身之外的东西)。您应该尽可能避免这种情况,因为它会使组件不可预测。

假设我有一个访问您的globalVariable函数的对象,我想在另一个页面中使用它。我如何知道如何定义globalVariable对象,甚至如何定义它?但是,如果您可以将信息传递给构造函数或作为参数传递给函数,那么我可以很容易地确定对象需要什么。

此外,当您访问或修改全局范围时,可能会影响其他对象。这就是为什么像jQuery这样的库在全局范围内只使用一个名称(最不可能)。它减少了与其他库发生冲突的可能性。换句话说,全局范围超出了您的控制范围,因此是危险的。


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 1094 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信