2013-09-23 42 views
1

比較這兩個碼 第一:JavaScript的模塊圖案VS功能

function initializeView() {} 
function init() { 
    initializeView(); 
} 

第二:

function init() { 
    (function initializeView() {})(); 
} 

如果initializeView()只在init(),則哪一個更好裏面引用?我認爲他們做了同樣的工作

編輯: 我沒有想到關於全球命名空間,因爲他們都在類中。

var MyObject = (function() { 
    ... 
    function init() {} 
    ... 
})(); 
+0

這取決於你是否需要它在全球範圍內與否。 – Sergio

+0

他們多久調用一次? 'initializeView'是'init'中的一個閉包嗎? – Bergi

+0

不經常。我不認爲這有助於任何事情。他們都工作,但不知道哪個更好。 @Bergi – Bill

回答

2

第一污染與不必要的可變全局命名空間,而第二創建不必要的關閉和/或創建關於init每次調用的附加功能對象。

假設initializeView僅在每個init()(根據您的IEFE建議)被調用一次時,最好是簡單地內聯代碼。

如果你需要它作爲一個函數來調用多次,我建議

var init = (function() { 
    function initializeView() {} 
    return function init() { 
     … 
     initializeView(); 
     … 
    }; 
}()); 
+0

Closures FTW。另外,應該注意的是,雖然有些人像原始代碼那樣命名IEFE,但我認爲這是不好的做法。 – Sethen

+0

爲什麼命名函數是一個不好的做法?它們有助於調試並保持代碼的表現力,我不在乎IE是否有問題。 – Bergi

+0

我正在討論像'var init =(function MyFunc(){// code}());'...對我來說這是不可讀的,可能會導致混淆。 – Sethen