Announcement

Collapse
No announcement yet.

anonyme selbstaufrufende Funktionen erläutern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • anonyme selbstaufrufende Funktionen erläutern

    Hallo!

    Habe mir gerade diesen Artikel hier durchgelesen:

    http://www.d-mueller.de/blog/javascr...me-funktionen/

    Ich verstehe ihn aber nicht Und woanders finde ich das auch nicht gut erklärt...

    Was genau ist der Sinn dieser Konstruktion und wie und wann wird da was aufgerufen?

    Code:
    var myvar = (function() {
        return "somestuff";
    })();
    Gleiches liegt wohl hier vor, nehme ich an:
    Code:
    window.requestAnimFrame = ( function() {
    	return window.requestAnimationFrame ||
    				window.webkitRequestAnimationFrame ||
    				window.mozRequestAnimationFrame ||
    				function( callback ) {
    					window.setTimeout( callback, 1000 / 60 );
    				};
    })();
    Könnte mir das hier auch jemand noch eklären (ohne die ganzen window.blablas, nur die Art der Konstruktion und die callback-Funktion).

    Danke!

  • #2
    Im Prinzip ist das die Kurzschreibweise für:

    [highlight=javascript]
    var myFunction = function() {
    return "somestuff";
    };

    var myVar = myFunction();
    [/highlight]

    Der einzige Unterschied ist dass myFunction eine Variable im globalen Window ist die man später auch wieder aufrufen könnte und die den globalen Namespace "verschmutzt".

    Verwende ich aber:

    [highlight=javascript]
    var myVar = (function() {
    return "somestuff";
    })();
    [/highlight]

    So wird eine anonyme Funktion erzeugt und diese anschließend aufgerufen. Diese Funktion wird nicht explizit als Variable im globalen Namespace (im Browser das window Objekt) zur Verfügung gestellt. Die 2. Variante benutzt dieses Pattern um eine Cross-Browser fähige requestAnimationFrame Funktion (window.requestAnimFrame) bzw. einen Callback dafür zur Verfügung zu stellen. Ausserdem ist noch zu bemerken dass der Rückgabewert der anonymen Funktion dort eine Funktion zurück gibt und keinen konkreten Wert.

    Anonyme Funktionen werden immer sofort aufgerufen. Der Browser kommt zum Skript und evaluiert das Skript. Darin wird zuerst die anonyme Funktion definiert und danach durch () sofort aufgerufen. Das geschieht synchron zum Aufbau der Seite. Das heisst dort stehen Dir auch nur die DOM Elemente zur Verfügung die vor dem dazugehörigen Skript Tag in die Seite eingefügt wurden.
    Zuletzt editiert von fanderlf; 17.07.2013, 16:01.

    Comment


    • #3
      Danke für deine Antwort!

      Eigentlich isses ja recht einfach: Statt die Funktion mit name(); aufzurufen, kann ich sie ja nur mit (); aufrufen, weil anonym...

      Aber ich könnte myVar trotzdem noch an späteren Stellen verwenden und dadurch die Funktion nochmals aufrufen, oder?

      Comment


      • #4
        Nein. myVar ist ja nicht die Funktion, sondern nur der Rückgabewert der Funktion. In diesem einfach der string "somestuff".

        Comment


        • #5
          Aahh, klar... danke!

          Comment


          • #6
            Ich hab das ewig auch nicht verstanden, also bedanke ich mich auch mal für die Erklärung. Die Sachen die man diesbezüglich online findet , sind auch nicht so sonderlich hilfreich. Vielleicht kannst du ja mal irgendwo dazu was schreiben fanderelf^^ Würde vielleicht Leuten die zukünftig diese Fragen haben helfen.

            Comment


            • #7
              Vielleicht muss ich mir doch mal einen Blog zulegen. Das ist nur leider immer ganz schön viel Arbeit. Mal sehen was sich mal lässt

              Comment

              Working...
              X