读书频道 > web开发 > Javascript > Effective JavaScript:编写高质量JavaScript代码的68个有效方法
第8条:尽量少用全局对象
2013-12-07 14:31:06     我来说两句 
收藏    我要投稿   
本书共分为7章,分别涵盖JavaScript的不同主题。第1章主要讲述最基本的主题,如版本、类型转换要点、运算符注意事项和分号局限等。第2章主要讲解变量作用域,介绍此方面的一些基本概念,以及一些最佳实践经验。第  立即去当当网订购

在JavaScript中很容易在全局命名空间中创建变量。创建全局变量毫不费力,因为它不需要任何形式的声明,而且能被整个程序的所有代码自动地访问。这种便利很容易诱惑初学者。然而经验丰富的程序员都知道应该避免使用全局变量。定义全局变量会污染共享的公共命名空间,并可能导致意外的命名冲突。全局变量不利于模块化,因为它会导致程序中独立组件间的不必要耦合。虽然“先这样写,以后再调整”(“code now and organize later”)可能比较方便,但优秀的程序员会不断地留意程序的结构、持续地归类相关的功能以及分离不相关的组件,并将这些行为作为编程过程中的一部分。

由于全局命名空间是JavaScript程序中独立的组件进行交互的唯一途径,因此,利用全局命名空间的情况是不可避免的。组件或程序库不得不定义一些全局变量,以便程序中的其他部分使用。否则,最好尽量使用局部变量。当然可以写一个只使用全局变量而不使用其他变量的程序,但那是自寻烦恼。即使在很简单的函数中将临时变量定义为全局的,我们都会担心是否有任何其他的代码可能会使用相同的变量名。

 


 

类似地,更新全局对象也会自动地更新全局命名空间:

 

这意味着你创建一个全局变量有两种方法可供挑选。你可以在全局作用域内使用var声明它,或者将其加入到全局对象中。无论使用哪种方法都行,但是var声明的好处是更能清晰地表达全局变量在程序范围中的影响。鉴于引用未绑定的变量会导致运行时错误,因此,保持作用域清晰和简洁会使代码的使用者更容易理解程序声明了哪些全局变量。

虽然最好限制使用全局对象,但是它确实提供了一个不可或缺的特别用途。由于全局对象提供了全局环境的动态反应机制,所以可以使用它查询一个运行环境,检测在这个平台下哪些特性是可用的。例如,ES5引入了一个全局的JSON对象来读写JSON格式的数据。将代码部署到一个不确定是否提供了JSON对象的环境时的一个权宜之计是,你可以测试这个全局对象是否存在并提供一个替代实现。

 

如果你已经提供了JSON的实现,你当然可以简单无条件地使用自己的实现。但是由宿主环境提供的内置实现几乎总是更合适的。因为它们按照一定的标准对正确性和一致性进行了严格检查,并且普遍来说比第三方实现提供了更好的性能。

特性检测技术在Web浏览器中特别重要,因为在各种各样的浏览器和浏览器版本中可能会执行同样的代码。特性检测是一种使得程序在平台特性集合的变化中依旧健壮的相对简单的方法。这种技术也适用于其他地方。例如,此技术使得在浏览器和JavaScript服务器环境中共享程序库成为可能。

 提示

避免声明全局变量。

尽量声明局部变量。

避免对全局对象添加属性。

使用全局对象来做平台特性检测。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:概述
下一篇:第9条:始终声明局部变量
相关文章
图文推荐
3.12 本章小结
3.10 添加新函数
3.9 递归
3.8 闭包
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站