一、避免全局变量的理由

js中避免创建全局变量一是避免命名冲突,二是避免因为创建全局变量让代码变得脆弱,三是创建全局变量会让代码难以测试。

二、避免创建全局变量的几种方法

//避免全局变量 避免命名冲突
//1.单全局变量之命名空间
var YourGlobal = {
namespace: function(ns) {
var parts = ns.split("."),
object = this,
i, len;
for (i=0,len=parts.length;i < len; i++) {
if(!object[parts[i]]) {
object[parts[i]] = {};
}
object = object[parts[i]];
}
return object;
}
}; YourGlobal.namespace("Books.MaintainableJavaScript");
YourGlobal.Books.MaintainableJavaScript.author = "youyi";
YourGlobal.namespace("Books.HighPerformanceJavaScript");
//保持上面的YourGlobal.Books.MaintainableJavaScript原封不动
YourGlobal.Books.HighPerformanceJavaScript.name = "王宝强";
console.log(YourGlobal.Books.MaintainableJavaScript.author);//youyi
console.log(YourGlobal.Books.HighPerformanceJavaScript.name);//王宝强
//在方法调用之后立即给它添加属性
YourGlobal.namespace("Books").ANewBook = {}; //2.单全局变量之模块
//YUI模块 是将模块和命名空间概念合并在一起
YUI.add("my-module",function(Y) {
//添加命令空间
Y.namespace("Person.MaintainableJavascript");
Y.Person.MaintainableJavascript.author = "xiaoma";
},"1.0.0",{requires:["dependency1","dependency2"]}); //YUI().use()传入想加载的模块名称来使用模块
YUI().use("my-module","another-module",function(Y) {
console.log(Y.Person.MaintainableJavascript.author);
}); //异步模块 AMD
define("my-module2",["dependency1","dependency2"],function(dependency1,dependency2) {
var Books = {};
Books.MaintainableJavaScript = {
author: "张歆艺"
};
return Books;
}); //AMD模块可以是匿名的,模块加载器可以将JavaScript文件名当作模块名称,所以如果有一个叫my-module2.js的文件,模块可以只通过模块加载器来加载 define(["dependency1","dependency2"],function(dependency1,dependency2) {
var Books = {};
Books.MaintainableJavaScript = {
author: "张歆艺"
};
return Books;
}); //模块加载器
//1.使用AMD模块,需要一个与之兼容的模块加载器(Dojo),用Dojo可以向下面这样来加载
//Dojo同样自己也封装了AMD模块
var books = dojo.require("my-module2");
console.log(books.MaintainableJavaScript.author); //2.RequireJs指定依赖和回调函数
//Jquery和Dojo都可以使用RequireJs来加载AMD模块
require(["my-module2"],function(books) {
console.log(books.MaintainableJavaScript.author);
}); //零全局变量
//特殊情况下才会使用,脚本很短且不需要和其他代码产生交互的情况下使用
(function(win) {
//"use strict"严格模式,避免创建全局变量
var doc = win.document;
//其他变量
//其他相关代码
});

  

<<编写可维护的JavaScript>>之避免使用全局变量的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. HTML-day-2-HTML常用标签

    一.常用标签 超链接标签 href-----hyperlink reference _blank,是指在新窗口中打开. 作用:①做锚点的标签,<a name=””></a> ② ...

  2. 设置mysql远程连接root权限

    在远程连接mysql的时候应该都碰到过,root用户无法远程连接mysql,只可以本地连,对外拒绝连接.需要建立一个允许远程登录的数据库帐户,这样才可以进行在远程操作数据库.方法如下:默认情况下MYS ...

  3. leetcode之链表排序题

    原文链接:点击打开链接 原题是这样的: Given a linked list and a value x, partition it such that all nodes less than x  ...

  4. UVa1589 象棋

    就是声明两个数组,一个模拟棋局,另一个模拟黑将不能走的位置.不过写得有点长了... #include<iostream> #include<string> using name ...

  5. UVa 1586 Molar mass --- 水题

    UVa 1586 题目大意:给出一种物质的分子式(不带括号),求分子量.本题中分子式只包含4种原子,分别为C.H.O.N, 原子量分别为12.01,1.008,16.00,14.01 解题思路:先实现 ...

  6. kuangbin_ShortPath E (POJ 1860)

    第一次做判环 然后RE了五次 死在了奇怪的点 memset(vis, 0, sizeof dis); memset(dis, 0, sizeof vis); 什么鬼?? 什么鬼?? 其实代码本身还是不 ...

  7. ExtJS常用的正则表达式

    正则表达式用于字符串处理.表单验证等场合,实用高效.现将一些常用的表达式收集于此,以备不时之需. Ext.onReady(function(){ Ext.QuickTips.init(); }); E ...

  8. 对 Android 开发者有益的 40 条优化建议

    本文转载于:http://www.oschina.net/translate/40-developer-tips-for-android-optimization?cmp 下面是开始Android编程 ...

  9. 文件的搜寻【转vbird】

    which (寻找『运行档』) [root@www ~]# which [-a] command 选项或参数: -a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称 分 ...

  10. Linux-lsof命令

    lsof,List Open Files 列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件(lsof强大原因).所以 ...