2012-07-31 57 views
1

我在努力搞清楚什麼是下面的JavaScript類函數是什麼在Javascript

var FirstName = function(){ 
    var value = 0; 

    this.getValue = function(){ 
     return value; 
    } 
} 

var FirstName = function(){ 
    var value = 0; 

    return { 
     getValue: function(){ 
      return value; 
     } 
    } 
} 

我明白的兩個版本之間更好的這兩種風格的寫作功能之間的差異後者形成一個封閉,但我不明白,從使用的角度來看,第二種方式封閉提供優於第一種優勢?

編輯:根據來自菲利克斯的評論,這兩個函數形成閉包。所以在語義上這兩個函數沒有區別(據我瞭解)。那麼哪一個是首選方式?有沒有任何指導方針?

+0

在這兩種情況下,函數形成閉包。 – 2012-07-31 20:57:21

+0

第二個是甚至在做任何事情之前的壓痕深度3級... – Esailija 2012-07-31 20:58:12

+0

感謝您更正菲利克斯。但是,有沒有推薦的JavaScript函數編寫方式? – Suhas 2012-07-31 20:58:17

回答

0

在這種情況下,第二種方式看起來有點多餘。但我相信有些情況下使用第二種方式可能更有利。我個人會選擇第一個,因爲它通常會讓代碼變得更乾淨,代碼更少。這只是一個偏好的事情。無論你喜歡什麼,並與你正在編寫的其他代碼保持一致。一致性是最重要的事情。

0

第一種方法不返回任何東西,只是創建函數作爲全局變量,而第二種方法返回內部函數作爲對象的成員。

通過通過返回內部函數,您可以在整個代碼中設置和維護函數的不同狀態,而第一個代碼在每次運行時都會覆蓋該方法。看起來像後者更靈活..

你可以用這個demo弄得我做的。

+0

假設'新'在這裏用來構造對象(因爲函數名以UpperCase開頭),儘管它在第二個中是冗餘的,因爲它在任何情況下都返回純文本對象。有很多方法可以創建閉包,返回一個函數只是一個。 – Esailija 2012-07-31 21:11:36

+0

我明白了。我以我的帖子中的鏈接作爲參考。猜猜這是不準確的(雖然它有626個投票)..我會更新。 – 2012-07-31 21:24:20

+0

是的,事實上,對這個答案的第一個評論是批評這一說法。它一定要編輯... – Esailija 2012-07-31 21:27:21