frankx: Notation: "(function() {...}) ();"

Hellihello,

in dem von Mathias im Weblog erwähnten Code von Dustin Diaz ist wie folgt codiert:

  
(function() {  
  // private constructor  
  function _$(els) {  
    this.elements = [];  
    for (var i=0; i<els.length; i++) {  
      var element = els[i];  
      if (typeof element == 'string') {  
        element = document.getElementById(element);  
      }  
      this.elements.push(element);  
    }  
    return this;  
  }  
//... etc.pp  
  window.$ = function() {  
    return new _$(arguments);  
  }  
})();  

Ich sehe da (function(){})(); - kann mir einer sagen, was "das" ist?

Dank und Gruß,

frankx

  1. Hallo frankx,

    kann mir einer sagen, was "das" ist?

    Eine Funktion ohne Name (anonyme Funktion?), die sich selbst aufruft und, da sie eben keine Möglichkeit des wiederholten Aufrufs bietet, vom garbage collector sofort entfernt wird nach deren Abarbeitung.

    Mit freundlichem Gruß
    Micha

  2. Hallo,

    die Frage gabs schonmal:
    </archiv/2006/9/t137561/>
    </archiv/2006/9/t137561/#m893621>

    Es geht darum, den globalen Scope »rein« zu halten, aber trotzdem in gezielt globalen Funktionen interne Funktionen ansprechen zu können.

    (function() {

    function _$(els) {}
      window.$ = function() {
        return new _$(arguments);
      }
    })();

      
    \_$ ist durch die Verschachtelung (Closure) in window.$ verfügbar, ohne dass es im globalen Scope liegt. »Interne« Funktionen müssen somit nicht öffentlich gemacht werden.  
      
    
    > Ich sehe da `(function(){})();`{:.language-javascript} - kann mir einer sagen, was "das" ist?  
      
    Es wird eine namenlose Funktion notiert und ausgeführt. Mehr nicht.  
    Variablen darin sind lokal und von außen nicht sichtbar; das, was überbleibt, sind globale Variablen, die ausdrücklich an window geheftet werden. Der Witz ist nun, dass diese globalen Funktionen durch die Closure aber Zugriff auf die lokalen Variablen haben, auch nach der Ausführung der anonymen Funktion.  
      
    Mathias
    
    -- 
    [SELFHTML aktuell Weblog](http://aktuell.de.selfhtml.org/weblog/)