我期待这篇文章Wrap up javascript global variables,
var Global_VARS = {
productId:10,
itemId:20,
commentId:30,
ratingId:20
}
这是编写JavaScript变量的好方法吗?
答案 0 :(得分:4)
您应该遵循的一般规则是不要使用全局变量来混淆Global命名空间。
所以你应该保持全局变量尽可能低,以避免混乱。将所有变量分组到一个唯一对象中是一个好主意,而不是将它们全局化。
将它们置于一个无穷大的函数中也很好,在一个函数中你可以拥有任意数量的变量,它们在外部是不可用的。然后你可以选择哪一个可以在外面使用。
答案 1 :(得分:2)
将所有常见的全局变量包含在命名空间中是一个好主意的 start 。然而,作者试图解决的问题是一个更大的问题 - 适当的封装问题。有几种不同的方法可以将它们组合成许多不同的模式。
这些模式中的每一个都启用或禁用了一些东西:
首先是这里已经提到的包含对象模式:
// `root_reference` is pseudo-code for `window` or `this`.
root_reference.GLOBAL_VARIABLES = {
variable1: 1,
variable2: 2,
variable3: {data: 1, point: 2}
// etc ...
}
GLOBAL_VARIABLES.variable1
,则会在GLOBAL_VARIABLES
可访问的每个范围内更新。{ / LI>
root_reference.GLOBAL_VARIABLES.variable1
。此模式的优点是您可以从代码中的任何位置轻松访问变量。这种模式的缺点是您可以从代码中的几乎任何位置轻松更新此变量,但您不能指望在任何地方回滚。
第二种模式是范围模式,它使用var
:
var variable1 = 1, variable2 = 2, variable3 = {data: 1, point: 2};
function display_vars(one, two, three) {
console.log("Variable 1", one);
console.log("Variable 2", two);
console.log("Variable 3", three);
}
display_vars(variable1, variable2, variable3) // 1, 2, {data: 1, point: 2}
// Immediately Executed Function Expression
(function(old_var_1, old_var_2, old_var_3){
var var variable1 = 12, variable2 = 21, variable3 = {data: 11, point: 21};
// We have now shadowed the variables in this scope:
display_vars(variable1, variable2, variable3) // 12, 21, {data: 11, point: 21}
// But we also have access to the old ones:
console.log(old_var_1, old_var_2, old_var_3);
})(variable1, variable2, variable3);
// And they are unchanged outside of the new scope
display_vars(variable1, variable2, variable3) // 1, 2, {data: 1, point: 2}
root_reference
上,它们将始终可全局访问,但如果它们已在中间范围内定义,则需要手动将它们传递到最内层范围。)答案 2 :(得分:1)
当然,但你也可以写:
var productId = 10,
itemId = 20,
commentId = 30,
ratingId = 20;
这样您就不必Global_VARS.productId
,只需使用productId
答案 3 :(得分:1)
答案 4 :(得分:1)
如果你想完全包装它们,可以在匿名函数(以及代码的其余部分)中定义它们并将其命名为
(function(){
var x = ..., ... ...;
// do stuff
})();