儘可能避免全局變量是個老生常談的問題了,但確實很是重要,JS能夠隨意定義全局變量,不幸的是,全局變量會削弱程序的靈活性,隨意使用全局變量,也許會由於命名衝突而致使不可預知的問題,因此應該避免。javascript
全局變量的三種定義方式:html
1、使用惟一全局變量
這個方法是在全局聲明一個對象字面量,做爲咱們的全局變量容器,這樣全局就只出現一個全局變量:java
var myApp = {};
此時,變量myApp就成了咱們的變量容器了,全部的全局變量均可以保存在這裏:閉包
1 myApp.students = { 2 name:"小明", 3 age:18 4 }; 5 6 myApp.teachers = { 7 A: { 8 姓名:"李老師", 9 gender:"男" 10 }, 11 B: { 12 姓名:"朱老師", 13 gender:"女" 14 } 15 };
只要把多個全局變量都整理在同一個命名空間下,就能顯著下降與其餘應用程序、組件或類庫之間產生不可預知的相互影響的可能性,也使其可讀性更高。函數
2、使用閉包
閉包的概念:一個函數嵌套有內部函數,該內部函數能夠訪問外層函數的變量,且該外部函數的return爲內部函數,這就被稱爲閉包。spa
不懂閉包的童鞋請參考阮一峯老師的文章:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html插件
使用閉包,也能顯著減小全局變量污染,就是建立一個函數,該函數包括,私有變量和一個特權對象,特權對象的內容是,利用閉包能訪問到私有變量的函數,最後返回特權對象。code
//建立函數,返回一個特權對象
var f3 = function() { var age = 18; return { name: "啊哈", age: age, gender: "男" } }(); //獲取變量 f3.name = "啊哈";
對於閉包,還有一個方法,就是使用匿名自執行函數,其實這貨就是個如假包換的閉包,全部代碼寫在其中,在它內部聲明的變量所有都是局部變量,通常用來寫徹底獨立的腳本,好比jQuery,插件等。。。htm
(function() { //我在一個匿名自執行函數中 //some code here... })()
3、0全局變量
哈哈,這個方法直接杜絕了全局變量,那就是不在全局聲明變量(包括隱式聲明全局變量);對象