use*_*416 32 javascript global global-variables
我一直看到警告不要在JavaScript中使用全局变量,但似乎人们这么说的唯一原因是因为堵塞了全局命名空间.我可以想象通过将所有变量放入一个大对象中可以很容易地解决这个问题.现在的问题是:除了便利之外,还有其他理由不使用全局变量吗?是否涉及性能或兼容性问题?
und*_*rob 12
全局变量可以显着增加耦合,显着降低代码的可伸缩性和可测试性.一旦开始使用全局变量,您现在必须知道变量的修改位置和方式(即打破封装).大多数文献和惯例都会争辩说,使用全局变量时,性能是您最不关心的问题.
这是一篇很棒的文章,概述了为什么全局变量会引起头痛.
简而言之,全局变量会导致(以及更多)以下问题。
1) 变量命名冲突——如果你在一个团队中工作并且你自己和你的同事在全局范围内使用相同的变量名,最后定义的变量将覆盖初始变量。这种明显的后果可能会造成毁灭性的后果。
2) 安全性 - 特别是在网络上,每个用户都可以访问 Window(或全局)对象。通过将变量放在全局范围内,您可以让任何用户查看或更改您的变量。
3) 较慢 - 这可以说是可以忽略不计,但它仍然存在。JavaScript 变量查找的工作方式是 JavaScript 引擎将在当前查找变量的作用域上进行查找。如果找不到,它将查找下一个父作用域。如果在那里没有找到它,它将继续向上查找,直到它到达寻找该变量的全局对象。如果您的所有变量都位于全局范围内,则 JavaScript 引擎将始终必须遍历每个范围才能最终到达全局范围以找到变量。
如果您的脚本很长并且您使用来自许多函数的这些变量,那么它将增加您的调试时间,因为全局变量的值可能已经从任何地方更改,因此如果您正在跟踪它变为非预期值的位置,那么我必须检查所有.
如果不同的程序员从页面中包含的其他脚本修改此变量,则此方案更加痛苦.