避免使用全局变量

一、全局变量带来的问题

  a)      命名冲突

i.          当全局变量和全局函数越来越多时,发生命名冲突的概率也随之增高

ii.          如果函数中使用了外部文件的全局变量,这种依赖关系是很难追踪到的

iii.          脚本中存在多个全局变量的时候,不同位置的函数中调用这个全局变量的值也不相同

iv.          全局变量是定义js内置对象的地方,对于没有任何限定的全局变量和浏览器未来的内置API或者其他开发者的代码产生冲突的概率极高

  b)      代码的脆弱性

i.          一个依赖于全局变量的函数深耦合于上下文环境中,如果环境发生变化函数就失效了

ii.          多处函数使用全局变量是也会不经意间修改全局变量,导致全局变量值的依赖变得不稳定

iii.          定义函数的时候尽量将数据置于局部作用域中,使用函数外部的数据时应当以参数形式传进去,这样可以将函数和外部环境隔离开,修改对程序其他部分不会造成影响

  c)      难以测试

i.          单元测试的时候函数依赖全局变量所以需要为其创建完整的全局环境才能正确的测试

二、意外的全局变量

  a)      在函数中声明变量的时候不使用var/let/const的情况会出现变量提升,会成为隐式的全局变量

  b)      当全局变量和全局变量同名的时候局部作用域中使用变量的时候默认的是局部变量,可以使用window.count来访问全局变量

  c)      可以使用JSlint来检测意外的全局变量,如果没有使用var声明的话会有警告

三、单全局变量方式

  a)      创建一个唯一的全局变量名,并将所有的功能代码都挂载到这个全局对象上

  b)      每个可能的全局变量都成为唯一全局对象的属性,从而不会创建多个全局变量

  c)      团队开发的时候都知道这个全局变量,很容易继续为它添加属性

  d)      可以根据功能来进行分组,比如dom操作的一类,事件相关的一类,对于添加新功能和查找已有功能都比较方便,每个文件都有一个命名空间,可以使用下边的方法创建

  e)      模块

四、零全局变量

  a)      使用场景:不会被其他脚本访问的完全独立的脚本,所有的脚本都合并到一个文件

  b)      使用立即执行函数调用并将所有脚本放置其中

  c)      只要代码被需要被其他代码依赖就不能使用这种模式

最新文章

  1. Javascript初学篇章_1(概念/数据类型)
  2. run time
  3. Entity Framework 5中应用表值函数进行Linq查询
  4. 【BZOJ 1023】【SHOI 2008】cactus仙人掌图
  5. Leetcode Sum Root to Leaf Numbers
  6. uglifyjs压缩批处理
  7. kaili linux中文乱码
  8. [Android Studio 1A] – 插件
  9. [转]Ubuntu下GitHub的使用
  10. CPU指令的流水线运行
  11. maven项目转eclipse
  12. iOS自定义多参数类型方法
  13. jQuery 中的简单动画
  14. Python基础-文件操作(七)
  15. 管理ESXI网络
  16. FreeBie—免费设计师专用素材网
  17. 关于table动态添加数据 单元格合并 数组合并
  18. Sql Server 中 根据列名查询表名
  19. 关于java线程的daemon的认识
  20. COM是如何实现STA的

热门文章

  1. java.util.ConcurrentModificationException异常;java.util.ConcurrentModificationException实战
  2. 12-赵志勇机器学习-Label_Propagation
  3. LA2955 Vivian难题——梅森素数
  4. 微信H5页面分享获取JS-SDK
  5. 某模拟赛C题 树上路径统计 (点分治)
  6. python paramiko模块简介及安装
  7. Socket网络编程——C++实现
  8. CSS居中方案
  9. System.getProperty("line.separator") 是什么意思?
  10. Azure DevOps Server (TFS) 修改Git文件大小限制