全球国家通常不赞成。但是,我认为我可以使用 clientside 来简化我的应用。
我有一个AJAX网络应用,可以在用户登录时设置多个值 - 用户ID以及其他一些信息。此信息在应用的生命周期内不会更改。
我还有一个数据缓存,可以最大限度地减少到服务器的访问。
我可以安全地将所有这些全球化吗? (只读用户信息和缓存)我认为它会使它更简单,因为我不必担心在函数之间以有时笨拙的方式传递值。
基本上,它就像常量,其值在“编译时”不知道。
在某些方面,DOM本身就是一种全局状态 - 我可以在HTML中存储一个值,它可以从程序的任何地方访问。
答案 0 :(得分:0)
如果你知道你在做什么,使用全局变量没有错。尝试通过将所有“常量”包装在单个全局对象中来保持其清洁。全局变量的主要问题是你被绑定到你的全局存储的任何状态的单个实例,在你的情况下这可能是也可能不是问题。
答案 1 :(得分:0)
你可以创建一个命名空间,这样变量就像一样全局,但你不必为冲突和那种东西担心太多。 Facebook在其中一些API上做到了这一点。
为了安全起见,这是一个示例安全命名空间实现:
if(!window.MY_NAMESPACE){
MY_NAMESPACE = {
a_variable : "some value",
a_function: function(params){
return a_variable;
},
};
}
这样你就可以获得类似全局的东西,而不会与文档中的其他变量(或脚本的副本)发生冲突
答案 2 :(得分:0)
我认为将全局状态用于您提到的目的是完全可以的。只需确保它们只被写入一次,即在执行期间不会被更改。因此,尝试给他们一些名称,以后你不会意外地覆盖它们(这在Javascript中始终是一个危险 - 伪造var
并且你的变量变成全局的,即附加到window
对象)并且最好放在它们都进入相同的结构,以进一步减少名称冲突的危险(名称减少,碰撞减少)。
还要记住,变量并不是真正的“全局”;如果用户保持登录但打开了一个新的窗口,那么“全局”变量就会消失。在这种情况下,您必须确保不会出现不一致,即服务器假定在用户已登录的情况下,变量已设置。