用匿名函數將腳本包起來;javascript
使用多級命名空間。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 的基礎上使用命名空間的方式進行拓展。這裏給命名空間起名字也須要很講究,好的命名規則會對團隊協同合做有很大的幫助。具體的命名方式待我賣個關子,之後再說。作用域