避免使用全局变量

一、全局变量带来的问题

  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)      只要代码被需要被其他代码依赖就不能使用这种模式

编写可维护的JavaScript-随笔(四)的更多相关文章

  1. 【读书笔记】读《编写可维护的JavaScript》 - 编程实践(第二部分)

    本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事 ...

  2. 《编写可维护的javascript》读书笔记(中)——编程实践

    上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...

  3. 拯救一切强迫症 - 读《编写可维护的 JavaScript》(一)

    拯救一切强迫症 - 读<编写可维护的 JavaScript>(一) 本文写于 2020 年 4 月 24 日 我在小学的时候就有接触过编程,所以读大一的时候 C 语言还算是轻车熟路.自然会 ...

  4. 《编写可维护的JavaScript》之编程实践

    最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...

  5. 编写可维护的Javascript读书笔记

    写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ...

  6. 《编写可维护的javascript》读书笔记(上)

    最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ...

  7. 编写可维护的JavaScript 收纳架

    如果你看过Nicolas C.Zakas写过的任何作品,你必须承认他是个不折不扣的天才.也只有天才级的才能写出<JavaScript高级程序设计>让所有的前端攻城师人手一本.Nicolas ...

  8. 编写可维护的JavaScript之编程风格

    在团队中只有每个人的编程风格一致,大家才能方便的互相看懂和维护对方的代码. 1. 层级缩进 对于层级缩进目前有两种主张:1)使用制表符这种方法有两种好处,第一,制表符和缩进层级之间是一一对应关系,符合 ...

  9. 《编写可维护的JavaScript》 笔记

    <编写可维护的JavaScript> 笔记 我的github iSAM2016 概述 本书的一开始介绍了大量的编码规范,并且给出了最佳和错误的范例,大部分在网上的编码规范看过,就不在赘述 ...

  10. 编写可维护的JavaScript代码(部分)

    平时使用的时VS来进行代码的书写,VS会自动的将代码格式化,所有写了这么久的JS代码,也没有注意到这些点.看了<编写可维护的javascript代码>之后,做了些笔记. var resul ...

随机推荐

  1. springboot2.0整合logback日志(详细)

    <div class="post"> <h1 class="postTitle"> springboot2.0整合logback日志(详 ...

  2. React和Redux的开发经验之谈

    1.显示控制用state,共享数据用redux,觉得可以不用redux的就不要用 2.表单项集中的地方,推荐用高阶组件,单个表单项,不推荐用高阶组件 3.涉及对服务数据的处理,在redux的model ...

  3. Windbg Watch(监视)窗口的使用

    在WinDbg中,可以使用“监视”窗口显示和更改全局和局部变量和寄存器信息. 您可以自定义此窗口以显示您正在跟踪的项..“监视”窗口可以显示所需的任何变量列表.这些变量可以包括来自任何函数的全局变量和 ...

  4. 关于Visual Studio源代码文件的行尾

    我们都知道,UNIX只使用换行符(linefeed)来结束每一行,而DOS传统上使用CR+LF来结束每一行,Visual Studio应该完全在DOS世界中,但不管出于什么原因,当我们从代码服务器上获 ...

  5. vue之父子组件通信

    一. 父-子组件间通信 let children={    template:`<div><h1>{{send}}</h1></div>`,  # 将传 ...

  6. postman使用--Monitor

    前戏 现在我们已经能完成接口的批量执行,添加断言,数据驱动,设置变量等等方法.但是有一天,用户反应说我们的网站访问不了了.这时候,那帮程序猿查日志的查日志,看数据库的看数据库,找到原因在发布到线上已经 ...

  7. 剑指offer 6:链表(从头到尾打印链表)

    链表的数据结构 struct ListNode { int value; ListNode* next; }; 那么在链表的末尾添加一个节点的代码如下: void insert(ListNode** ...

  8. redis 键值对 有效期设置

    redis 键值对 有效期设置redis中可以使用expire命令设置一个键的生存时间, 到时间后redis会自动删除它<-----> 类比于javaweb系统临时数据 过期删除功能 ex ...

  9. Lab3:虚拟内存管理

    前言 虚拟内存是计算机系统内存管理的一种技术.它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要 ...

  10. gcc命令详解

    gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC. ...