1. 程式人生 > >JavaScript的自執行方法和模組模式

JavaScript的自執行方法和模組模式

首先,每個方法定義的區域性變數,在外部是無法訪問的,比如:

function foo(){
    var name;
}

這裡的name變數對外界沒有任何的汙染,不會影響到其他地方的程式碼。如果每個模組的程式碼都這樣寫,那麼就都不會打架了。

利用的函式的這一特性來實現隔離非常有效。通常情況下,我們只需要一個匿名的自執行函式就可以了:

(function(){
   var name = 'Tom';
   return name;
})()

如果僅僅是return一個name那大可沒必要這麼幹,我們需要返回一個具有類似JavaBean讀寫功能的物件:

(function
(){
var name = 'Tom'; var age = 10; return { name :name,age:age } })()

這裡返回了一個JSON物件,既然是物件,那麼完全可以是有方法的:

(function(){
   var name = 'Tom';
   var age = 10;
   return {
        name:name,age:age,
        setName(n){
            name = n;
        },
        setAge(a){
            age = a;
        }
   }
})()

是的,不光可以有方法,方法中竟然還能訪問早已經執行完畢了的那個自執行方法的變數。真的很神奇。

神奇的背後其實是閉包在起作用。自執行方法雖然早在setName和setAge方法之前就已經執行完畢了,但因為後兩個方法的定義中引用到了自執行方法中的變數。那麼JavaScript引擎在為後兩個函式建立閉包的時候會將自執行方法的變數“保留”。

這樣就實現了程式碼的隔離(避免帶來汙染)還能合理訪問的目的。