2013-02-27 77 views
0

我有JavaScript代碼如下;Javascript的公共變量/方法

var foo = (function() { 
    //Private vars 
    var a = 1; 

    return { 
     //Public vars/methods 
     a: a, 
     changeVar: function() { 
      a = 2; 
     } 
    } 
})(); 

現在我不確定public vars/methods的語法是如何工作的? 你可以請核心如何「返回」變量/方法使他們作爲公共?

謝謝。

+0

你不是在聲明變量'a' public。您將返回一個具有相同名稱屬性的對象,並將其設置爲相同的值。當你改變變量時,你改變了屬性,而不是原來的變量。 – Archer 2013-02-27 17:57:11

回答

1

變量foo的值實際上是該函數返回的值。注意最後一行,(),表示立即評估此功能。通過評估函數並將其返回值賦給變量,您可以隱藏本地(函數)作用域內的變量,以使其不能在該作用域之外訪問。只有返回對象上的成員是可訪問的,但由於內部的任何函數都與它們的外部作用域形成了閉包,所以仍然可以使用本地(隱藏)變量。

這方面的一個例子是隱藏某些地方的國家,只允許通過方法獲得它:

var foo = (function() { 
    //Private vars 
    var a = 1; 

    return { 
     //Public methods 
     getVar: function() { 
      return a; 
     }, 
     setVar: function (val) { 
      a = val; 
     } 
    } 
})(); 
0

好吧,你已經返回的匿名函數的對象,這意味着對象被分配到foo。因此,您可以訪問對象的屬性,如foo.afoo.changeVar,但您可以繼續讓私有變量在函數的作用域內存在。如果沒有更具體的問題,不能幫上忙。

+0

Thx很多...請教你在第二部分澄清......當你說「但你可以繼續讓私有變量存在,在函數的範圍內」 – testndtv 2013-02-27 18:08:26

+0

你能看到上面的問題嗎? – testndtv 2013-02-27 18:39:56