全局变量污染什么的最憎恶了

准绳

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

  2. 运用多级定名空间。

这第二条“运用多级定名空间”这个,我以为并非很圆满的好主意。由于假如级数太多的话会形成变量名字变得长的一逼。

革新历程

原始代码

没有做过任何优化的满目疮痍的代码。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, 换而言之,他们之间没办法通讯了。

//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 这类全局全局变量作为通讯的序言实在并非一个好办法,如许做会致使全局变量越来越多,反而不好保护。

运用定名空间

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 的基础上运用定名空间的体式格局举行拓展。这里给定名空间起名字也须要很考究,好的定名划定规矩会对团队协同协作有很大的协助。详细的定名体式格局待我卖个关子,今后再说。

    原文作者:ChanceWong
    原文地址: https://segmentfault.com/a/1190000003465766
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞