Hallo,
Bitte kann mir jemand die Syntax von
function( ) { document.getElementById( "keyword" ).onkeyup = doSearch; }
erklären.
Das ist eine sogenannte Function-Expression.
Man kann Funktionen auf verschiedene Art notieren. Und da Funktionen nichts anderes als Objekte sind, die an anderen Objekten als Eigenschaften bzw. Methoden hängen, kann man Funktionsobjekte auch überall speichern - genauso wie z.B. eine String-Variable.
function ( …Parameter… ) { …Körper… } ist einfach ein Ausdruck, der ein Funktion-Objekt zurückgibt. Er kann überall notiert werden, wo Ausdrücke erlaubt sind, zum Beispiel:
alert(function () {});
alert( typeof(function () {}) );
Man kann das Ergebnis des Ausdrucks dann z.B. in irgendeiner Variable bzw. Eigenschaft speichern.
var meinefunktion = function () { window.alert("Hallo Welt!"); };
alert(typeof meinefunktion);
Auf globaler Ebene, also außerhalb von Funktionen, sind folgende Schreibweisen identisch:
function meinefunktion (param) {
alert("Hallo Welt!");
}
var meinefunktion = function (param) {
alert("Hallo Welt!");
};
var meinefunktion = new Function(param, 'alert("Hallo Welt!");');
Das von dir gefundene function () { document.getElementById( "keyword" ).onkeyup = doSearch; } ist also nur ein bloßer Ausdruck. Wenn man den in einer Zeile als Expression Statement notiert, macht er überhaupt nichts:
function () { document.getElementById( "keyword" ).onkeyup = doSearch; };
Hat keinerlei Wirkung. Genauso wie jeder andere Ausdruck (ohne den Zuweisungs-Operator):
1 + 1;
Tut für sich genommen auch nichts.
Function-Expressions machen also nur Sinn, wenn man mit dem Ergebnis des Ausdrucks etwas anfängt, z.B. das Function-Objekt an eine andere Funktion übergibt oder es in einer Variable speichert.
Relativ üblich ist:
window.onload = function () {
…mach was…
};
Das kann man auch ohne Function-Expression schreiben, dann nutzt man ein gewöhnliches Function-Statement:
function init () {
…mach was…
}
window.onload = init;
Soweit erst einmal – Function-Expressions erfüllen noch viele andere Aufgaben. Allerdings sind sie nicht immer nötig, wenn sie verwendet werden, meistens reicht das gewöhnliche function Funktionsname () {} aus, also das Statement, nicht die Expression.
Mathias