Funktionen sind das fundamentale Sprachkonzept in JavaScript. Eine Funktion ist eine Folge von Anweisungen, die zusammen die beabsichtigte Aufgabe lösen.
Um eine Funktion verwenden zu können, muss sie zuerst definiert werden. Nach der Definition kann sie aufgerufen werden.
Dieses Kapitel behandelt
Eine Funktionsdefinition besteht aus dem Schlüsselwort function gefolgt von
Normalerweise werden Funktionsdefinitionen im HEAD des HTML Dokuments definiert und im BODY aufgerufen. Dies ist empfehlenswert, da ansonsten eine Funktion verwendet werden könnte, bevor die Definition durch das Laden der Seite abgeschlossen wäre. Dies würde dann einen Laufzeitfehler verursachen.
function square(x)
|
Die Funktion "square" hat einen formalen Parameter
"x". Die Funktion besteht aus drei Anweisungen: eine Variablendeklaration, eine
Zuweisung und aus der Anweisung "return", die das Ergebnis der Funktion
spezifiziert.
Parameter werden in JavaScript "call by value"
übergeben. Das bedeutet, der formale Parameter kann in der Funktion geändert
werden, dies hat keinen Einfluss auf den Aufrufer (wir sehen das gleich).
Wird ein Objekt als Parameter übergeben und die
Funktion ändert eine Eigenschaft des Objektes, so ist die Eigenschaft des
Objektes beim Aufrufer geändert (wir behandeln das im Rahmen der
Objektdiskussion; dann werden wir auch sehen, dass eine Methode eine Funktion,
die mit einem Objekt in Verbindung steht, ist).
FunktionsaufrufInnerhalb einer HTML Seite kann eine Funktion aufgerufen werden, die in der Seite oder in einer anderen benannten Seite (oder einem Frame) definiert wurde.
Ein Funktionsaufruf besteht aus
Eine Funktionsdefinition führt die Funktion noch nicht aus. Erst durch den Aufruf der Funktion mit aktuellen Parametern werden die Anweisungen des Funktionskörpers ausgeführt. Dabei werden die formalen Parameter durch korrespondierende aktuelle Parameter ersetzt.
Der Aufruf der Funktion "add" mit den aktuellen Parametern x (=1) und y (=2) im obigen Beispiel bewirkt, dass in der Funktion für x der Wert 1 und für y der Wert 2 verwendet wird. Der Ausdruck "x+y" wird somit zu "3" ausgewertet. Das return Statement bewirkt, dass die Kontrolle an den Aufrufer zurück geht und dort durch das write Statement der Wert 3 ausgegeben wird.
Innerhalb einer Funktionsdefinition können weiter Funktionen aufgerufen werden.
Variablen, die innerhalb einer Funktion definiert werden, heißen lokale Variablen, da sie nur in der Funktion lokal verwendet werden können. D.h. außerhalb der Funktion sind sie nicht zugreifbar. Der Gültigkeitsbereich ist der Funktionskörper.
Soll eine Variable in mehreren Funktionen Verwendung finden, so ist sie außerhalb der Funktionen zu deklarieren - man nennt sie globale Variable. Globale Variablen sind gültig von Deklarationspunkt bis zum Ende des Dokumentes, in dem sie deklariert sind.
Bei der Variablendeklaration kann man "var" voranstellen oder sie implizite durch die erste Verwendung deklarieren. Lokale Variable sind stets mit "var" zu deklarieren.
Wenn man in einer Funktion bei der Deklaration von Variablen "var" wegläßt, so hat man automatische eine globale Variable deklariert.
Eine Deklaration einer Variablen mit einem Namen einer globalen Variablen innerhalb eines Blockes "verdeckt" in diesem Block das globale Objekt. In diesem Block ist das globale Objekt nicht mehr sichtbar, obwohl es gültig ist..
"g" in der Funktion f1 im obigen Beispiel ist verdeckt das globale "g". Somit kann in f1 nicht auf das globale g zugegriffen werden.
Das nachfolgende Beispiel zeigt, dass der Wert des aktuellen Parameters nach dem Aufruf beim Aufrufer nicht verändert wird.
Damit kann man innerhalb einer Funktion mit den lokalen Variablen arbeiten, ohne dass dies einen Einfluss auf die Verarbeitung in der aufrufenden Funktion hat. Dies spart die Deklaration von unnötigen Variablen innerhalb einer Funktion.
Wie ist die Ausgabe des nachfolgenden Programms?
In Javascript gibt es mehrere vordefinierte Funktionen. Sie werden nun erklärt.
Die Funktion "eval" evaluiert den JavaScript Kode (String), der ihr als Parameter übergeben wird.
Syntax:
eval ( expr)
"expr" ist der auszuwertende String. Wenn der Sting ein Ausdruck ist, so wird der Wert des Ausdrucks ermittelt. Ist der String ein Programm, so wird es ausgeführt.
"eval" wird häufig verwendet, um Benutzereingaben ausführen zu lassen. Das folgende Beispiel ist ein kleiner Taschenrechner (ohne Fehlerbehandlung), wenn arithmetische Ausdrücke eingegeben werden. Man kann auch JavaScript Kode angeben, z.B. 'alert("Hallo")', dann wird der Kode ausgeführt.
Die Funktion isFinite wurde in JavaScript 1.3 hinzugefügt. Mit ihr kann man prüfen, ob ein Zahlenwert "NaN" oder unendlich ist.
Syntax:
isFinite ( number )
isFinite liefert als Ergebnis "false", wenn number positv oder negativ Unendlich ist oder den Wert "NaN" hat; ansonsten "true.
| Beispiel 2.6-2 | |
Die Funktion isNaN (is Not a Number) wertet das Argument aus um zu entscheiden, ob er eine gültige Zahl repräsentiert.
Syntax:
isNaN( testValue )
isNaN gibt den Wert "true" zurück, wenn "testValue" der Wert "NaN" ist, ansonsten "false".
Die Funktion wird meist mit den nachfolgend beschriebenen Funktionen parseInt und parseFloat verwendet.
| Beispiel 2.6-3 | |
Im obigen Beispiel ist als Dezimaltrenner das Komma verwendet. Somit liefert isNaN "false"
Die beiden Funktionen parsen ihre Strinargumente und geben einen numerischen Wert zurück, wenn der String in eine Zahl konvertiert werden kann.
Syntax:
parseFloat ( str )
str wird von links nach rechts gelesen und die maximale Folge von Vorzeichen, Ziffern und Exponent ermittelt. Der Rest wird abgeschnitten und als Resultat wird der entsprechende numerische Wert zurück geliefert. Ist kein Float erkennbar, weil der str z.B. mit einem Buchstaben anfängt, so ist das Ergebnis "NaN".
Syntax:
parseInt ( str [, radix] )
str wird geparst und Integer zur Baisis radix zurückgegeben. Das zweite Argument ist optional; wird nicht angegeben wird von der Basis 10 ausgegangen. str wird solange von links nach rechts gelesen, bis keine Konvertierung zur Basis radix mehr möglich ist. Ist das erste Zeichen schon nicht konvertierbar, so wird "NaN" zurück gegeben.
| Beispiel 2.6-4 | |
| Beispiel 2.6-5 | |
Die beiden Funktionen sind dazu da, ein Objekt umzuwandeln. Wir werden die Funktionen bei der Betrachtung von Objekten genauer behandeln.
Syntax:
Number ( objRef )
String ( objRef )
wobei objRef eine Referenz auf ein Objekt ist.
Das folgende Beispiel konvertiert ein Datum in einen String.
| Beispiel B2.6-6 | |
Mittels der beiden Funktionen können Strings kodiert und dekodiert werden. Die Funktion escape liefert als Ergebnis die Hexadezimalkodierung ihres Argumentes; unescape ist die Umgekrfunktion von escape. Verwendet wird der ISO Latin Zeichensatz.
Damit lassen sich auch nicht darstellbare Zeichen in Strings kodieren.
| Beispiel 2.6-7 | |
Verdeutlichen Sie sich die o.a. Funktionen, indem Sie mehrere Aufrufe verwenden.