gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:51:27 25 4
gpt4 key购买 nike

我到处都读到 global variables are bad并且应该使用替代品。具体在 Javascript 中,我应该选择什么解决方案。

我正在考虑一个函数,当输入两个参数时 (function globalVariables(Variable,Value)) 会检查 Variable 是否存在于本地数组中,如果确实存在,则将其值设置为 Value,else,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".
};

这是一个Singleton Pattern吗?顺便说一句?

在这个特定的场景中,一个函数可能会在某个时间点设置一个变量,而在很久以后另一个函数,也许当用户提交表单时,将需要获取该变量。因此,第一个函数无法将变量作为参数传递给后面的函数,因为它永远不会从第一个函数中调用。

谢谢,感谢您的帮助!

最佳答案

不鼓励在 javascript 中使用全局变量的主要原因是,在 javascript 中,所有代码共享一个全局命名空间,而且 javascript 隐含了全局变量,即。未在局部范围内显式声明的变量会自动添加到全局命名空间。过度依赖全局变量会导致同一页面上的各种脚本之间发生冲突(阅读 Douglas Crockford's articles)。

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

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的名称即可。

关于javascript - 我听说全局变量不好,我应该使用什么替代解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2613310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com