molily: seltsame (zumindest mir unbekannte) Syntax

Beitrag lesen

Hallo,

Aber worin ist denn nun der Unterschied zwischen

( function () {...} () );

und

( function () {...} ) ();

Dagibt es keinen Unterschied, wobei ich persönlich die zweite Variante verwenden würde und auch logischer finde.

Ich habe nun molilys Artikel gelesen und in etwa verstanden, dass es sich hier um eine Art Closure handelt.

»Closure« bezeichnet eine bestimmte Eigenart von verschachtelten Funktionen.

Die Verwendung von Closures ist der letztliche Zweck der ganzen Konstruktion, aber die anonyme Funktion, um die es hier geht, ist selbst nicht in einer anderen Funktion geschachtelt und wirkt daher nicht als Closure.

Struppi verwendet diese Konstruktion, um gewisse Variablen mehreren Funktionen zur Verfügung zu stellen, ohne dass diese Variablen global sind:

(function () {  
   var a, b, c;  
   window.f1 = function () {  
      ...  
   };  
   window.f2 = function () {  
      ...  
   };  
   ...  
}();

a, b und c sind nicht global verfügbar, aber für die globalen Methoden f1 und f2 und andere, auf ähnliche Weise notierte Methoden. Das liegt daran, dass f1 und f2 als Closure wirken und a, b und c einschließen. So können f1, f2 und ähnlich notierte Methoden diese Variablen gemeinsam benutzen, ohne dass sie global sein müssen.

Man könnte genauso gut schreiben:

function initAddEventScript () {  
   var a, b, c  
   f = function () {  
      ...  
   };  
}  
initAddEventScript();

Aber dann hätte man eine globale Funktion initAddEventScript, die man eigentlich gar nicht braucht, weil sie nur einmal ausgeführt wird und als Container für die Variablen-Mitbenutzung der darin notierten Funktionen fungiert. Daher benutzt man eine anonyme Funktion, die man sofort ausführt.

Mathias

--
»No nations, no borders.«
SELFHTML Weblog