Hallowelt: (function() {})() / jQuery

Hallo

Ich programmiere zwar schon recht lange, auch in Javascript. Arbeite gerade die JQuery-Einführung durch und da bin ich auf zwei Konstrukte gestossen, die mir komplett fremd sind.

1. Wie funktioniert der folgende Code? Bzw. was bedeutet er? Insbesondere verstehe ich nicht, was die Konstruktion aus Bezeichner ($) und den folgenden Klammern soll.

  
// Shorthand for $( document ).ready()  
$(function() {  
  console.log("ready!");  
});  

2. Wozu dienen hier die Klammern ganz am Schluss?

  
// An immediately-invoked function expression  
(function() {  
  
  var foo = "Hello world";  
  
})();  
  
console.log( foo );   // undefined!  

Gruss und vielen Dank! :-)

  1. Also das $ ist etwas kurzes für jQuery(). Also eine Variable.

    function(){} ist eine annonyme funktion. So ein Konstrukt wird immer benutzt wenn man eien funktion via callback übergeben bzw. aufrufen möchte und sie nur an dieser stelle braucht. Möchtest du die funktion anders wo nochmals aufrufen brauchst du wieder einen bezeichner.

    Die Klammern am Ende führen dazu dass die funktion an dieser stelle sofort aufgerufen wird:
    function test(){
       //--- irgendwas
    }
    test();

    ist das gleiche wie:
    function test(){
       //--- irgendwas
    }();

    Hoffe ich konnte helfen.

    Gruß
    *müde*
    T-Rex

    1. Vielen Dank für die Antwort! Nun ist eigentlich alles klar.

      Letztlich sind es ja gar keine speziellen Sprachkonstrukte, bloss ganz normale Syntax. Die Schreibweise in Javascript ist für einen C-Programmierer wie mich aber manchmal etwas ungewohnt, so dass man den Wald vor lauter Bäumen nicht sieht. (Oder geht die Redewendung andersrum?)

  2. Zusätzlich zu dem von T-Rex gesagten:

    // Shorthand for $( document ).ready()
    $(function() {
      console.log("ready!");
    });

      
    Wie im Kommentar des codes schon steht: diese Funktion wird ausgeführt, wenn das Dokument fertig geladen wurde. Deine Beispiele sind also nicht gleich. Ging jetzt nicht explizit aus der Antwort hervor, deshalb nochmal zur Sicherheit.  
      
    Cheers,  
    Baba
    
    1. Zusätzlich zu dem von T-Rex gesagten:
      Wie im Kommentar des codes schon steht: diese Funktion wird ausgeführt, wenn das Dokument fertig geladen wurde. Deine Beispiele sind also nicht gleich. Ging jetzt nicht explizit aus der Antwort hervor, deshalb nochmal zur Sicherheit.

      Ja, richtig. Wobei meine Frage darauf abzielte, was die syntaktische Bedeutung des Konstrukts ist, nicht was es konkret bewirkt. Aber jetzt ist eigentlich alles völlig klar! :-)