2014-03-28 116 views
6

我看到這樣的事情今天Javascript爲什麼在IIFE中包含變量或構造函數?

var Visualizer = (function() { 
    function Visualizer() { 
    ... 
    } 
    Vizualizer.prototype.function1 = function() { ... } 
    ... 
    return Visualizer; 
})(); 

var viz = new Visualizer(); 

我不明白這一點對剛剛擺脫iife包裝的。

+1

那麼,在這種情況下沒有太大的好處,但如果你需要一些輔助函數呢?那是什麼時候它很有用,因爲你把它們保密,並且不會泄漏到全球範圍。 – elclanrs

+0

就像把輔助函數放在包裝中而不是函數中一樣?將它們放入函數之間有什麼區別? – natecraft1

+1

如果你這樣做,你每次調用'new'時都會創建幫助函數。 – elclanrs

回答

21

您在這裏展示的特定構造沒有意義。在這種類型的結構中使用IIFE的原因是,當你需要聲明靜態數據時,希望對對象可用,但不希望它可公開訪問或干擾全局名稱空間或是實例數據。

由於您展示的代碼沒有顯示任何這些代碼,因此它並不真正提供任何好處,正如您所展示的。但是,如果在對象之外但是在IIFE內部聲明瞭一些其他變量,則IIFE將保護並封裝它們並將它們與外界隔離。

舉例來說,如果你有這樣的:

Visualizer = (function() { 
    var counter = 0; 
    function Visualizer() { 
    counter++; 
    ... 
    } 
    Visualizer.prototype.getCount = function() { return counter; } 
    ... 
    return Visualizer; 
})(); 

var viz = new Visualizer(); 

然後,IIFE將是封閉的可變counter這將是提供給展臺的所有實例的所有方法,但來自外界的隔絕IIFE將提供一些潛在的好處。

+0

真的很酷的解釋 – natecraft1

-3

對不起,我含糊其詞,但我認爲用言語表達JS需要正確括號以知道什麼操作優先,什麼屬於相當於簡單地說「知道什麼是什麼」,並指出蟒蛇只是說如果它沒有這些括號,它會適當地採用像python這樣的方法,而不需要括號;縮進很重要。可能我錯過了整個問題,但我認爲我是對的。

相關問題