6.1 全局变量带来的问题
6.1.1 命名冲突
当脚本中的全局变量和全局函数越来越多时,发生命名冲突的概率也随之增高。
所有的变量都被定义为局部变量,这样的代码才是最容易维护的。
6.1.2 代码的脆弱性。
一个依赖于全局变量的函数即是深耦合于上下文环境中。如果环境发生改变,函数很可能就失效了。
当定义函数的时候,最好尽可能多地将数据置于局部作用域内。
任何来自函数外部的数据都应当以参数形式传进来。
这样做,可以将函数和其外部环境隔离开来,并且你的修改不会对程序其他部分造成影响。
6.1.3 难以测试
确保你的函数不会对全局变量有依赖,这将增强你的代码的可测试性。
6.2 意外的全局变量
JS中有不少陷阱,其中一个就是不小心创建全局变量。
请看以下代码:
function doSomething() {
var count = 10;
title = "javascript" //不好的写法,创建了全局变量
}
不小心省略var 语句可能意味着你在不知情的情况下修改某个已存在的全局变量。
function doSomething() {
var count = 10;
name = "javascript" //不好的写法,创建了全局变量
}
因为name实际上是window的一个默认属性,这个全局变量覆盖了全局变量中的name
避免意外的全局变量
1:全局变量和局部变量都用var声明
2:利用工具自动检测报警
6.3 单全局变量
过多的全局变量,长期看来可行性和可维护性都欠佳。
最佳方法是依赖尽可能少的全局变量,即只创建一个全局变量。
6.3.1 命名空间
将功能按照命名空间进行分组,可以让你的单全局对象变的井然有序,同时,也可以让团队成员知晓新功能应该属于哪个部分,
或者去哪里查找已有的功能。
var modular = {
//绑定初始化值
init: function(){
this.time = 30;
},
//执行初始化方法
bindEvents: function(){
this.render();
},
render: function(){
}
}
modular.init();
6.3.2 模块
使用AMD模块化 或 requireJS模块加载器