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

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

我读遍了所有的地方全局变量不好而且应该使用其他方法。特别是在Javascript中,我应该选择什么样的解决方案。

我在想一个函数,当给出两个论点时function globalVariables(Variable,Value))查看本地数组中是否存在变量,如果它确实将其值设置为Value否则,VariableValue都是附加的。如果函数是在没有参数的情况下调用的(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".};

这是一个单例模式顺便说一句?

在这个特定的场景中,一个函数可能在某个时间点设置一个变量,而稍后另一个函数(可能在用户提交表单时)需要得到该变量。因此,第一个函数不能将变量作为参数传递给后一个函数,因为从第一个函数开始就不会调用它。

谢谢你,谢谢你的帮助!


慕村9548890
浏览 1095回答 3
3回答

慕田峪7331174

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.

交互式爱情

全球状态在几个方面造成了问题。一个是代码重用。当您访问某种全局状态时,这意味着组件必须知道它的环境(它本身之外的东西)。您应该尽可能避免这种情况,因为它会使组件不可预测。假设我有一个访问您的globalVariable函数的对象,我想在另一个页面中使用它。我如何知道如何定义globalVariable对象,甚至如何定义它?但是,如果您可以将信息传递给构造函数或作为参数传递给函数,那么我可以很容易地确定对象需要什么。此外,当您访问或修改全局范围时,可能会影响其他对象。这就是为什么像jQuery这样的库在全局范围内只使用一个名称(最不可能)。它减少了与其他库发生冲突的可能性。换句话说,全局范围超出了您的控制范围,因此是危险的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript