编写可维护的JavaScript-随笔(四)
避免使用全局变量
一、全局变量带来的问题
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-随笔(四)的更多相关文章
- 【读书笔记】读《编写可维护的JavaScript》 - 编程实践(第二部分)
本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事 ...
- 《编写可维护的javascript》读书笔记(中)——编程实践
上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...
- 拯救一切强迫症 - 读《编写可维护的 JavaScript》(一)
拯救一切强迫症 - 读<编写可维护的 JavaScript>(一) 本文写于 2020 年 4 月 24 日 我在小学的时候就有接触过编程,所以读大一的时候 C 语言还算是轻车熟路.自然会 ...
- 《编写可维护的JavaScript》之编程实践
最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...
- 编写可维护的Javascript读书笔记
写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ...
- 《编写可维护的javascript》读书笔记(上)
最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ...
- 编写可维护的JavaScript 收纳架
如果你看过Nicolas C.Zakas写过的任何作品,你必须承认他是个不折不扣的天才.也只有天才级的才能写出<JavaScript高级程序设计>让所有的前端攻城师人手一本.Nicolas ...
- 编写可维护的JavaScript之编程风格
在团队中只有每个人的编程风格一致,大家才能方便的互相看懂和维护对方的代码. 1. 层级缩进 对于层级缩进目前有两种主张:1)使用制表符这种方法有两种好处,第一,制表符和缩进层级之间是一一对应关系,符合 ...
- 《编写可维护的JavaScript》 笔记
<编写可维护的JavaScript> 笔记 我的github iSAM2016 概述 本书的一开始介绍了大量的编码规范,并且给出了最佳和错误的范例,大部分在网上的编码规范看过,就不在赘述 ...
- 编写可维护的JavaScript代码(部分)
平时使用的时VS来进行代码的书写,VS会自动的将代码格式化,所有写了这么久的JS代码,也没有注意到这些点.看了<编写可维护的javascript代码>之后,做了些笔记. var resul ...
随机推荐
- Leecode之双指针及二分查找
题目 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的 ...
- selenium 滚动条的滚动
如果是一个页面自带的滚动条(即网页的的滚动条) 可直接用js js="window.scrollTo(x,y);" x(横向),y(纵向)代表的就是位置 ,具体移动到哪里 ...
- 【oracle】ORA-12638
背景:换电脑时将旧电脑的ORACLE的登陆信息转到新电脑.其中有三个文件:listener.ora sqlnet.ora tnsnames.ora 解决办法:删了sqlnet.ora 原因:
- IIS 登录失败 该登陆名来自不受信任的域,不能与windows身份认证一起使用
原文:https://blog.csdn.net/hhw199112/article/details/80234462 错误: 登录失败 该登陆名来自不受信任的域,不能与windows身份认证一起使用 ...
- 图像处理pillow模块
pillow模块: -->基本的图像处理模块 Pip install pillow from PIL import Image #1.读取图片 im = Image.open('/test.jp ...
- 面向对象的理解 抽象类&接口
一.关于面向对象 1.什么是面向对象 在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu ...
- shell (二) shell for循环
for循环 基本示例 for i in var1 var2 var2 do echo $i done for i in {1..100} do echo $i done 列表中复杂值,可以使用引号或者 ...
- 【操作系统之六】Linux常用命令之less
一.概念less 工具也是对文件或其它输出进行分页显示的工具,是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more .tail更加的有弹性.在 more 的时候,我们并没有 ...
- odoo前端必填提示
- sts问题合集
背景:用来记录在使用sts过程中遇到的相关问题 Version 当前jdk版本号 of the JVM is not suitable for the this product.Version:1.8 ...