2014-03-28 8 views
6

Ich sah so etwas wie dieses heuteJavascript warum eine Variable oder Konstruktor in einem IIFE?

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

var viz = new Visualizer(); 

ich den Sinn dieser nicht im Vergleich zu nur der IIFE Wrapper befreien verstehen zu werden.

+1

Nun, in diesem speziellen Fall ist es nicht viel Nutzen, aber was ist, wenn Sie einige Hilfsfunktionen benötigen? Dann ist es nützlich, weil Sie sie privat halten und nicht zum globalen Geltungsbereich gelangen. – elclanrs

+0

als in die Wrapper die Hilfsfunktionen, aber nicht die Funktion? Was ist der Unterschied zwischen den Funktionen? – natecraft1

+1

Wenn Sie das tun, würden Sie jedes Mal, wenn Sie 'new' aufrufen, die Hilfsfunktionen erstellen. – elclanrs

Antwort

21

Es gibt keinen Grund für die spezifische Konstruktion, die Sie hier zeigen. Der Grund, eine IIFE in dieser Art von Konstrukt zu verwenden ist, wenn Sie statische Daten haben, die Sie erklären müssen, will Ihr Objekt zur Verfügung stehen, aber wollen sie nicht öffentlich zugänglich oder stören den globalen Namensraum sein oder Instanz sein Daten.

Da der Code, den Sie zeigt nicht irgendwelche von denen zeigen, ist es nicht wirklich bietet einen Vorteil, wie Sie gezeigt haben. Aber wenn außerhalb des Objekts andere Variablen deklariert würden, aber innerhalb des IIFE, würde das IIFE sie schützen und einschließen und sie von der Außenwelt isolieren.

Zum Beispiel, wenn Sie dies hatte:

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

var viz = new Visualizer(); 

Dann würde die IIFE sein, eine variable counter umschließt, die allen Methoden aller Instanzen von Visualizer zur Verfügung stehen würde, aber von der Außenwelt isoliert und die IIFE würde einen potenziellen Nutzen bieten.

+0

wirklich coole Erklärung – natecraft1

-3

Sorry, ich habe vage formuliert, aber ich denke, JS mit Worten muss Klammer richtig sein, um zu wissen, welche Operation Priorität hat und was zu dem entspricht einfach zu sagen "weiß, was in was" ist und sagte Python nur sagen dass, wenn es diese Klammern nicht hätte, es auf eine Methode wie Python zurückgreifen würde, wo Klammern nicht nötig sind; wo Einrückung wichtig ist. Möglicherweise habe ich die ganze Frage vermisst, aber ich denke, dass ich es richtig verstanden habe.

Verwandte Themen