编写可维护的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 ...
随机推荐
- ubuntu配置定时任务crontab何保存退出
crontab -e配置完成后,如何把保存并退出? 1.Ctrl+o 写入 2.出现“FIile name to Write...”,输入Enter 3.Ctrl+x 保存输出 提示“crontab: ...
- #51nod上topcoder练习记
好久没刷51nod了,又听说topcoder有很多好题.那么就来51nod上刷吧.(那个客户端搞得有点烦(看不懂)) [1366 贫富差距] 当图不连通的时候,答案为无穷大. 当图连通时,两个点之间的 ...
- 排序算法-桶排序(Java)
package com.rao.sort; import java.util.*; /** * @author Srao * @className BucketSort * @date 2019/12 ...
- emacs第二天
setq 和setq-default的区别 cursor-type是一个buffer local 变量 在每一份buffer中都有一份值 如果变量是buffer local 里面的变量 setq-de ...
- Angle Beats Gym - 102361A(计算几何)
Angle Beats \[ Time Limit: 4000 ms \quad Memory Limit: 1048576 kB \] 题意 给出 \(n\) 个初始点以及 \(q\) 次询问,每次 ...
- django -- ORM实现作者增删改查
前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...
- 三天精通Vue--ES6的常用语法
详细学习请参考 阮一峰的ECMAScript 6 入门 let和const的使⽤ es5中使用var来声明全局变量 es5中我们学习了使用var来声明变量,但是使用var声明变量,会存在变量提升的问 ...
- node.js 路由详解
路由的基本使用 第一步:获取url跟目录下的字符 var http = require('http'); var url = require('url') http.createServer(func ...
- c# 自定义按钮,渐变颜色(含中心向四周渐变,单方向渐变)
废话不多言,直接代码: public class RoundButton : Button { bool clickBool = false; //1.设置圆形 //2.设置渐变色 //3.设置too ...
- Zuul之路由熔断
Zuul作为Netflix组件,可以与Ribbon.Eureka.Hystrix等组件结合,实现负载均衡.熔断器的功能 Spring boot2X集成zuul与consul实现负载均衡和反向代理 当后 ...