Syntax
Clemens Hofbauer
- javascript
Hallo!
Bitte kann mir jemand die Syntax von
function( ) { document.getElementById( "keyword" ).onkeyup = doSearch; }
erklären.
Vielen Dank
Clemens
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
Super, danke für die tolle Antwort.
LG
Clemens
Hallo,
function( )
{
document.getElementById( "keyword" ).onkeyup = doSearch;
}
Das ist eine Funktion, die beim Aufruf dem HTML-Element mit
der ID "keyword" einen onkeyup-Eventhandler verpasst, der
entweder, für den Fall, dass in deinem Beispiel die Klammern
hinter doSearch fehlen sollten, die Funktion doSearch() aufruft
oder, nehmen wir an, dein Quellcode sei korrekt so, gleich der
Variable doSearch gesetzt wird. Für den letzteren Fall kann
ich allerdings recht wenig sagen, da ich den Inhalt von doSearch
nicht kenne und ferner auch nicht weiß, ob doSearch vielleicht
einen Methodenaufruf beinhalten kann, bzw. ob JavaScript so
etwas überhaupt unterstützt.
Dude
Hallo,
function( )
{
document.getElementById( "keyword" ).onkeyup = doSearch;
}
>
> Das ist eine Funktion, die beim Aufruf dem HTML-Element mit der [ID "keyword"](http://de.selfhtml.org/javascript/objekte/document.htm#get_element_by_id) einen [onkeyup-Eventhandler](http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onkeyup) verpasst
Wie im anderen Posting gesagt tut dieser Code für sich genommen gar nichts. Funktionen haben Namen. Diese Funktion hat keinen, man wird sie also (auf dem üblichen Wege) nicht aufrufen können. Daher: Function-Expression.
> der entweder, für den Fall, dass in deinem Beispiel die Klammern
> hinter doSearch fehlen sollten, die [Funktion](http://de.selfhtml.org/javascript/sprache/funktionen.htm#) doSearch() aufruft
Event-Handler registriert man ohne Funktionsaufruf, siehe <https://forum.selfhtml.org/?t=126123&m=813912>.
> oder, nehmen wir an, dein Quellcode sei korrekt so, gleich der Variable doSearch gesetzt wird.
Die »Variable« ist eben eine Funktionm, ein Funktionsobjekt.
> Für den letzteren Fall kann ich allerdings recht wenig sagen, da ich den Inhalt von doSearch nicht kenne und ferner auch nicht weiß, ob doSearch vielleicht einen Methodenaufruf beinhalten kann, bzw. ob JavaScript so etwas überhaupt unterstützt.
Siehe oben.
Man registriert auf diese Weise Funktionen als Handler von gewissen Events. doSearch ist der Name einer Funktion und bei dieser Zuweisung wird das zugehörige Funktionsobjekt kopiert, dieses klebt dann am entsprechenden Element(knoten)objekt.
Mathias
--
[Visitenkarte](http://community.de.selfhtml.org/visitenkarten/view.php?key=17) · [SELFHTML Weblog](http://aktuell.de.selfhtml.org/weblog/)