Ich bin dabei, ein kleines Javascript-Modul für eine App zu bauen. Ich wurde zwei verschiedenen Arten der Code-Organisation ausgesetzt: dem Objekt-Literal und dem IIFE. Ich weiß, dass mit dem IIFE alle Variablen und Funktionen privat bleiben, wenn sie nicht anderweitig veröffentlicht werden, aber gibt es andere Gründe, warum ich das über das Objektliteral verwenden würde?Wann ein IIFE vs Objektliterale zu verwenden?
Warum sollte ich das Objektliteral verwenden:
var gojiraSays = 'Toxic Garbage Island!!!'
var app = {
printStuff: function(){
console.log(gojiraSays)
}
}
... sagen über die IIFE Version:
var app = (function(){
var gojiraSays = 'Toxic Garbage Island!!!'
var yellGojira = function(){
console.log(gojiraSays);
}
return{
yellGojira: yellGojira
}
}());
app.yellGojira();
Das hängt von zu vielen verschiedenen Dingen ab. Wenn Sie zum Beispiel beabsichtigen, dass Ihr Modul mit etwas wie WebPack verwendet wird, ist das IIFE vollständig redundant. – Marty
Nach der Bearbeitung, ja, der Vorteil der Umhüllung in einem IIFE ist Verkapselung (nichts anderes kann mit Ihrem 'gojiraSays' verwirren). Es gibt IIFE in anderen Zusammenhängen (nicht als Kontrast zu Objektliteralen), z. innerhalb 'for' oder' while' Schleifen, um den Wert von lokalen Variablen statt der Variablen selbst für asynchrone Rückrufe zu erfassen ([http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple- praktisches Beispiel)). – Amadan
das sind zwei verschiedene Dinge. IIFEs befassen sich mit der Kapselung von (privaten) Variablen, während Objekte eine Struktur zum Kombinieren/Gruppieren von zusammengehörenden Dingen bereitstellen. IIFEs bieten keine Struktur und Objekte bieten keine Kapselung. Ihre Frage ist wie eine Frage, die Sie bevorzugen: Funktionen oder Variablen? Sie werden beide brauchen, und Sie werden sie wahrscheinlich kombinieren. – Thomas