全局变量污染什么的最讨厌了

原则

  1. 用匿名函数将脚本包起来;javascript

  2. 使用多级命名空间。java

这第二条“使用多级命名空间”这个,我以为并非很完美的好主意。由于若是级数太多的话会形成变量名字变得长的一逼。函数

改进过程

原始代码

没有作过任何优化的满目疮痍的代码。a.js 和 b.js 都有全局变量 window.a ,致使冲突,全局变量属于 window 做用域下的。优化

//a.js
<script type="text/javascript">
    //都什么时代了,script标签还写type属性呢?黄牌警告!下次绝逼不写了。
    var a = 123, b = "hello world";
</script>

//b.js
<script>
    //看!这把没有写了吧~就是这么任性,上面的那个写了的也绝逼不改!
    var a, c = "abc";
</script>

使用匿名函数

经过匿名函数改变了a.js 和 b.js 中的变量 a 的做用域,使得他们都再也不是全局变量了,可是在 b.js 中没法访问在 a.js 中的变量 a, 换而言之,他们之间没办法通讯了。code

//a.js
(function() {
    var a = 123, b = "hello world";
})();

//b.js
(function() {
    var a, c = "abc";
})();

使用全局变量进行通讯

var str;
//a.js
(function() {
    var a = 123,
    b = "hello world";
    window.str = a;
})();

//b.js
(function() {
    var a, c = "abc";
    alert(window.str);
})();

使用 window.str 这种全局全局变量做为通讯的媒介其实并非一个好办法,这样作会致使全局变量愈来愈多,反而很差维护。ip

使用命名空间

var GLOBAL = {};
//a.js
(function() {
    var a = 123,
    b = "hello world";
    GLOBAL.A.a = a;
})();

//b.js
(function() {
    var a, c = "abc";
    alert(GLOBAL.A.a);
})();

使用单一的全局变量 GlOBAL ,匿名空间里须要保存的属性都在全局变量 GLOBAL 的基础上使用命名空间的方式进行拓展。这里给命名空间起名字也须要很讲究,好的命名规则会对团队协同合做有很大的帮助。具体的命名方式待我卖个关子,之后再说。作用域

相关文章
相关标签/搜索