我听说JavaScript中的全局变量很糟糕,我可以理解一些命名空间问题等等。但是为什么我不应该使用全局变量来处理整个脚本中永远不会改变的东西 - 比如日期? (当然,这种情况每天都在变化,但只会在整个脚本中被引用而不会被更改。)
答案 0 :(得分:7)
如果它们受到您认为是唯一命名空间的保护,并且仅在有益时使用,则可以使用全局变量。主要问题是全局变量可以使一段代码更容易与其他一些代码冲突(如果不使用不同的名称空间或非常独特的名称)。由于这个原因和其他原因,最好在实际不需要全局变量时避免使用全局变量(当某些范围内声明的变量同样适用时),但仍有一些合适的理由可以使用全局变量。教育的主要观点是许多人在根本不需要时使用全局变量。如果您需要它们或发现它们更有效,那么只要您保护命名空间免受意外碰撞,就可以使用它们。
我个人创建了一个顶级全局对象,并将所有其他全局变量挂起来。
全局变量的其他一些问题:
for (i = 0; i < m.length; i++)
构造中看到过这种情况。追踪错误可能很难。window
对象的范围内,因此它们不仅可以与其他全局变量冲突,还可以与窗口对象上的任何其他变量冲突。答案 1 :(得分:2)
最大的答案是命名空间问题。如果您包含另一个使用相同变量名称的脚本,则会产生不需要的副作用。如果您可以确保将来不会在该页面上包含其他脚本,那么对您来说这不是一个特别的问题。
答案 2 :(得分:0)
您不应该在javascript中使用全局变量,因为可能与其他脚本冲突。例如,您正在编写jQuery插件。您的全局变量可能会覆盖另一个脚本中的全局变量。
因此,要将此可重写可能性降至最小,您应该只使用一个全局变量。如果你使用jQuery,你根本不应该使用全局变量。您可以扩展全局$对象。 例如:
$.extend({
something: your_app_variable
});
如果使用纯JavaScript,则应使用命名空间问题。为您的应用程序只创建一个全局变量。所有其他变量将只是此全局变量的属性。 例如:
// if APP doesn't exist creating it
APP = APP || {};
APP.some_method = function(){}
APP.some_property = 3;
UPD:请记住,您应该使用var
声明变量。除非声明的变量是全局的。忘记var
关键字导致的错误很难识别