2016-12-19 5 views
0

Nach dem Konzept Closures es die Variablen der äußeren lexikalischer Umgebung für zukünftige Ausführung seines inneren function.For, Beispiel speichern -Unterschied zwischen Schließungen und IIFE des in Javascript

function makeYounger(age){ 
function b(){ 
console.log("Original age is :"+age); 
} 
b(); 
return(function(){ 
return age/2; } 
); 
} 
var displayAge = makeYounger(20); 
console.log(displayAge()); 

Im obigen Szenario, Altersvariable wird von JavaScript-Engine beibehalten, um die innere Funktion, die in der Rückgabe-Methode vorhanden ist, auszuführen.

Hier kommt die IIFE,

(function(window){ 
var greeting = "Hello"; 
var fNameSpace1 ={ 
    name : "Appu", 
    callName : function(){ 
    console.log(greeting + fNameSpace1.name); 
    } 
    }; 
window.doer = fNameSpace1; 
}) (window); 

fNameSpace1.callName();//To execute the inner function 

Im obigen Szenario nach dem Konzept Schließungen ‚Gruß‘ Variablen und ‚fNameSpace1.name‘ werden für die zukünftige Ausführung des Rufname gespeichert werden() function.Instead Wir nutzen das "Fenster" -Objekt. Ich bin verwirrt, warum wir mit Fenster gehen, wenn wir Schließungen haben?

+0

Das 'fNameSpace1.callName();' am Ende wird fehlschlagen. Das Globale heißt 'Doer', nicht' FNameSpace1'. –

+0

Es ist nicht klar, was Sie fragen. Wenn die Frage lautet: "Was ist der Unterschied zwischen Schließungen und IIFEs?" Lautet die Antwort "ein IIFE ist eine spezifische Art, eine Schließung zu schaffen". Wenn die Frage lautet: "Warum gehen wir mit Fenster, wenn wir Schließungen haben?" Die Antwort lautet: Weil der Autor eine globale Variable haben wollte. –

+0

Meine Frage ist, was ist die genaue Verwendung von Fensterobjekt in diesem Szenario, wenn die JavaScript-Engine bereits FNameSpace1-Objekt speichert. Warum erstellen wir eine Referenz mit Fenster? – CodeForHappiness

Antwort

0

Differenz zwischen Schließungen und IIFE der in Javascript

Ein IIFE nur eine bestimmte Art und Weise zu A) Erstellen eines Verschlusses über den Kontext, in dem sie definiert ist, und B) Erstellen eines Kontextes, in dem erstellen andere Verschlüsse.

Meine Frage ist, was ist die genaue Verwendung von Fensterobjekt in diesem Szenario, wenn die Javascript-Engine bereits FNameSpace1 Objekt speichert. Warum erstellen wir eine Referenz mit Fenster?

So kann es außerhalb des IIFE verwendet werden, indem über die doer global darauf zu verweisen, dass window.doer = ... schafft.

Es gibt Dutzende verschiedene Möglichkeiten, dies zu tun. Einer von ihnen tut dies, indem er window so zuweist. Ein anderer tut es, indem Sie den Wert zurückgibt und mit einer var Aussage:

var doer = (function() { 
    // ... 
    return fNamespace1; 
})(); 

aber auch hier gibt es Dutzende von verschiedenen Formationen. Der Autor dieses bestimmten zog es vor, in eine Eigenschaft auf window als die Art zu schreiben, die globale zu erstellen.

Verwandte Themen