JavaScript-Funktionen
Grundlagen
- Funktionen sind Objekte
- Funktionen erben von Function.prototype welches von Object.prototype erbt.
- In Funktionen können Funktionen definiert werden
- Die inneren Funktionen haben Zugriff auf die Variablen der äußeren Funktion
- Eine Funktionsdeklaration hat 4 Teile
- das reservierte Wort function
- einen optionalen Funktionsnamen. Hat die Funktion keinen Namen ist es eine anonyme Funktion
- eine Parameterliste in Klammern mit Komma getrennt.
- den Funktionskörper in geschweiften Klammern
var functionRef = function functionName(parameter1, parameter2) {
Anweisungen;
return Wert;
}
- die Funktionsparameter sind automatisch innerhalb der Funktion als lokale Variablen definiert.
- mit dem optionalen Befehl return kann die Funktion einen Wert zurückgeben
- mit dem Befehl return endet die Funktion
- rechts vom Gleichheitszeichen steht ein Funktionsliteral
- durch die Zuweisung enthält functionRef eine Referenz auf die Funktion
- die Funktion lässt sich durch functionRef(parameter) aufrufen
Funktionsaufruf
-
Wird eine Funktion aufgerufen werden ihr die definierten Parameter und die Kontrolle des
Programms übergeben, damit der Code der Funktion ausgeführt wird
- Ausser den Parametern wird der Funktion noch this und arguments übergeben
- arguments enthält die Liste der Argumente, die an die Funktion übergeben wurde
- Der Inhalt von thishängt von der Art des Funktionsaufrufs ab. Es gibt 4 Arten
- Methoden-Aufruf
- Funktions-Aufruf
- Konstruktor-Aufruf
- Apply-Aufruf
Methoden-Aufruf
- Wird eine Funktion eines Objektes aufgerufen, handelt es sich um einen Methoden-Aufruf
- this ist dann eine Referenz auf das Objekt, das die Funktion enthält
Funktions-Aufruf
- wird eine Funktion ausserhalb eines Objektes aufgerufen, handelt es sich um einen Funktions-Aufruf
- this ist dann eine Referenz auf das globale Objekt (window)
-
Achtung: eine innere Funktion hat Zugriff auf die Variablen der äußeren
Funktion, mit Ausnahme von this und arguments. Eine innere Funktion hat eine
eigene this-Variable, die nicht dieselbe ist, wie die der äußeren Funktion!
Konstruktor-Aufruf
- wird eine Funktion mit new FunktionName() aufgerufen entsteht ein neues Objekt
- this ist in diesem Fall gebunden an das neu entstandene Objekt
- Funktionen, die dafür vorgesehen sind durch new aufgerufen zu werden nennt man Konstruktor
- Konstruktorfunktionen sollten mit Großbuchstaben anfangen, um sie von anderen Funktionen unterscheiden zu können
- Achtung: eine Konstruktorfunktion ohne new aufzurufen kann zu unvorhersehbarem Fehlverhalten führen.
Apply-Aufruf
- Mit der apply-Methode kann einer Funktion einn Array von Argumenten als Parameter übergeben werden
- Die apply-Methode erwartet 2 Parameter
- 1. ein Objekt, das von der Funktion zum this-Objekt wird
- 2. ein Array, das als Argumentliste der Funktion interpretiert wird.
Closure
-
Eine innere Funktion (also eine Funktion, die in einer anderen definiert wurde) hat Zugriff
auf die Variablen der äußeren Funktion
-
Lebt eine innere Funktion länger als ihre äußere Funktion und benutzt sie eine Variable der
äußeren Funktion wird diese Variable in der inneren Funktion eingeschlossen
- Das nennt man Closure
-
Achtung: die innere Funktion erhält die Variable selbst und nicht eine
Kopie davon. Gibt es also 2 Funktionen, so greifen sie auf dieselbe Variable zurück!