siehe dazu auch Selfhtml Wiki
Eine Referenz auf eine Funktion notiert man, indem man den Funktionsnamen ohne Klammern
aufführt. Eine Referenz ist kein Funktionsaufruf, sondern ein Zeiger auf die gleiche Speicherstelle.
Im folgenden wurde der Variablen a eine Referenz auf das Funktionsobjekt übergeben.
Mit console.log(a);
sieht man, dass die komplette Funktion in a erscheint.
function machWas() {
alert("hallo");
}
var a = machWas;
console.log(a);
Eine Funktion kann man auch auf andere Art definieren. Man weist der Variablen a eine anonyme Funktion zu. Das nennt man Funktionsausdruck.
In der nächsten Zeile erfolgt hier der Funktionsaufruf a();
var a = function(){alert("hallo");}
a();
Wenn ich in einer anderen Variablen b eine Referenz auf a setze,
enthält b genau das, was bei a rechts hinter dem Gleichheitszeichen steht.
var a = function(){alert("hallo");};
var b = a;
console.log(a);
console.log(b);
Schauen wir uns den Aufruf einer Funktion an, es ist hier a();
oder im obigen Fall könnte man auch b();
notieren.
Wir haben gesehen a und b enthält die Funktion.
Also ist der Funktionsaufruf die Funktion gefolgt von 2 Klammern.
var a = function(){alert("hallo");};
a();
Da a die Funktion enthält, die rechts hinter dem Gleichheitszeichen notiert ist,
müsste es doch auch möglich sein, diese namenlose Funktion direkt zu notieren und damit
einen Funktionsaufruf zu erzeugen.
Dazu muss man die Funktion nur in Klammern einschließen.
anstatt
a();
notiere
(function(){alert("hallo");})();
Die Klammern um den Funktions-Ausdruck sind erforderlich, damit der JavaScript-Parser erkennt, dass der Funktionsausdruck zusammen gehört. Ohne Klammern könnte es zu einer Fehlerausgabe kommen. Außerdem werden durch die Klammern Mehrdeutigkeiten vermieden.
Das funktioniert auch mit Parametern
(function(wort){alert(wort);})("Hallöchen");
Zum Vergleich eine Funktion mit Namen.
a = function(wort){alert(wort);};
a("Hallöchen");