Funktionen

Eine Funktion ist ein Block mit einer Liste (evt. auch leer) von Parametern, dem ein Name zugewiesen wird. Eine Funktion kann einen Resultatwert zurückgeben.

function meineFunktion(param1, param2, param3) {
    Anweisungen;
    return Ausdruck;
}

Beispiel: Der ursprüngliche Algorithmus von Euklid zur Ermittlung des größten gemeinsamen Teilers: Es ist eine geometrische Lösung; die kleinere Strecke wird jeweils von der größeren abgezogen.

function gcd(a, b) {
    while (a != b) {
        if (a > b) {
            a = a - b;
        } else {
           b = b - a;
        }
    }
    return a;
}

Die Anzahl der Parameter beim Aufruf muss nicht zwingend mit der Anzahl der Parameter in der Funktionsdefinition übereinstimmen. Wenn beim Aufruf weniger Parameter angegeben werden, dann wird für die übrigen Parameter einfach der Wert undefined eingesetzt. Weiter kann innerhalb der Funktion auch über das arguments-Array auf die Parameter zugegriffen werden.

Konstruktor-Funktionen

Wird eine Javascript-Funktion genutzt, um mit new erstellte Objekte zu initialisieren, spricht man von einem Konstruktor. Innerhalb des Konstruktors kann das neue Objekt über die this-Variable angesprochen werden:

function meinObjekt () {
    this.zahl = 1;
}

Neue Instanz erstellen:

var obj = new meinObjekt();

Test der Eigenschaft "zahl". Es wird "1" ausgegeben.

window.alert(obj.zahl);

Wenn Sie eigene Objekte mit gemeinsamen Eigenschaften erstellen wollen, ist es oftmals besser, diese Eigenschaften nicht im Konstruktor, sondern über die Prototyp-Kette zu erstellen (siehe Vererbung). Auf diese Weise benötigen die Javascript-Objekte weniger Speicher, denn die Eigenschaften werden nicht für alle Objekte, sondern nur für den Prototyp abgelegt.

Private Eigenschaften

Entgegen der vorherrschenden Meinung unterstützt Javascript private Eigenschaften, also Eigenschaften, die nur für das Objekt selbst sichtbar sind, nicht aber für andere Objekte. Im folgenden Beispiel wird die private Eigenschaft zahl1 definiert, die nur durch die Methoden getZahl1() und getNext() ausgelesen bzw. verändert werden kann.

function MyClass() {
    var zahl1 = 1;
    this.getZahl1 = function () { return zahl1; }
    this.getNext  = function () { return ++zahl1; }
}

neue Instanz der Klasse erstellen:

var obj = new MyClass;

zahl1 ist von außen nicht zugreifbar, daher wird "undefined" ausgegeben:

window.alert(obj.zahl1);

Es wird "1" ausgegeben:

window.alert(obj.getZahl1());

Es wird "2" ausgegeben

window.alert(obj.getNext());

Funktionales Programmieren

Da Funktionen in JavaScript vollwertige Objekte sind, sind sie Funktionen höherer Ordnung und können auch als Parameter an andere Funktionen übergeben werden.

Die Lambda-Notation des Lambda-Kalküls wird so geschrieben:

function (x) { return x*x + 2*x + 10; }

Beispiel für Verwendung einer Funktion höherer Ordnung:

Array.prototype.fold =
function (value, functor) {
    var result = value;
    for (var i = 0; i < this.length; i++) {
        result = functor(result, this[i]);
    }
    return result;
}
var sum = [21,33,17,12].fold(0, function (a, b) { return a + b; })

Ebenso ist es möglich curried functions zu schreiben:

function add(a, b) {
    if (arguments.length < 1) return add;
    if (arguments.length < 2) return function(c) { return a + c; }
    else return a + b;
}

Quelle: www.wikipedia.org