如何減小全局變量污染?

如何減小全局變量污染?

儘可能避免全局變量是個老生常談的問題了,但確實很是重要,JS能夠隨意定義全局變量,不幸的是,全局變量會削弱程序的靈活性,隨意使用全局變量,也許會由於命名衝突而致使不可預知的問題,因此應該避免。javascript

全局變量的三種定義方式:html

  1. 在任何函數外部var聲明一個變量;
  2. 在window對象中聲明一個變量;
  3. 在函數內部不先var聲明變量後直接使用變量(隱式全局變量)

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全局變量

哈哈,這個方法直接杜絕了全局變量,那就是不在全局聲明變量(包括隱式聲明全局變量);對象

相關文章
相關標籤/搜索