本系列作为Effective JavaScript的读书笔记。
Item 8:少用全局对象
重点:
- 全局对象能够带来便利,但是有经验的程序员都会视图避免它。因为它会带来潜在的命名冲突的风险
- 全局变量是维系不同模块之间的纽带,模块之间只能通过全局变量来访问对方提供的功能
- 能使用局部变量的时候,绝不要使用全局变量
- 在browser中,this关键字会指向全局的window对象
- 两种用来改变全局对象的方式,通过var关键字声明以及给全局对象设置属性(通过this关键字)
- 通过全局对象进行针对当前运行环境的特性检测(Feature Detection),比如在ES5中提供了一个JSON对象用来操作JSON数据,那么可以通过if(this.JSON)来判断当前运行环境是否支持JSON
总结:
- 避免声明全局变量
- 尽量使用局部变量
- 避免向全局对象中添加属性
- 利用全局变量来进行特性检测
Item 9:总是声明局部变量
重点:
- 隐式声明的全局变量比全局变量更加麻烦。比如:
function swap(a, i, j) {
temp= a[i]; // global
a[i]= a[j];
a[j]= temp;
}
上述的temp就会被隐式地声明成一个全局变量。
- 使用lint工具来检测JavaScript代码中是否有隐式声明的全局变量
总结:
- 总是记得通过var关键字来声明局部变量
- 使用lint工具来确保没有隐式声明的全局变量