Funktionsausdruck

Das Schl├╝sselwort function kann benutzt werden, um eine Funktion innerhalb eines Ausdrucks zu definieren.

Man kann Funktionen auch mit Hilfe des Function-Konstruktors oder als Funktionsdeklarationen definieren.

Syntax

var meineFunktion = function [name]([param1[, param2[, ..., paramN]]]) {
   statements
};

Seit ES2015 k├Ânnen au├čerdem Pfeilfunktionen benutzt werden.

Parameter

name
Der Funktionsname. Kann weggelassen werden, wenn es sich um eine anonyme Funktion handelt. Der Name ist nur im Funktionsk├Ârper referenzierbar.
paramN
Der Name eines Argumentes, welches der Funktion ├╝bergeben wird.
statements
Die Befehle, aus denen der Funktionsk├Ârper besteht.

Beschreibung

Ein Funktionsausdruck ist einem Funktionsstatement sehr ├Ąhnlich und hat fast die gleiche Syntax (siehe Funktionsstatement). Der gr├Â├čte Unterschied zwischen einem Funktionsausdruck und einem Funktionsstatement ist der Funktionsname, der in der Funktionsausdruck weggelassen werden kann, um eine anonyme Funktion zu erstellen. Ein Funktionsausdruck kann als IIFE (Immediately Invoked Function Expression) genutzt werden, die sofort nach Definition ausgef├╝hrt wird. Im Kapitel Funktionen finden sich weitere Informationen.

Hoisting von Funktionsausdr├╝cken

Funktionsausdr├╝cke in Javascript werden nicht automatisch an den Beginn des Scopes gehoben (hoisted), anders als Funktionsdeklarationen. Funktionsausdr├╝cke k├Ânnen nicht vor Definition im Code aufgerufen werden.

notHoisted(); // TypeError: notHoisted is not a function

var notHoisted = function() {
   console.log('bar');
};

Benannte Funktionsausdr├╝cke

Wenn man die aktuelle Funktion innerhalb des Funktionsk├Ârpers referenzieren will, muss ein Benannter Funktionsausdruck erstellt werden. Dieser Name ist nur im Funktionsk├Ârper referenzierbar. Das verhindert den Gebrauch der nicht standardisierten arguments.callee Eigenschaft.

var math = {
  'fakultaet': function fakultaet(n) {
    if (n <= 1)
      return 1;
    return n * fakultaet(n - 1);
  }
};

math.fakultaet(3) //3;2;1;

Die Variable, der ein Funktionsausdruck zugewiesen wurde, hat eine name Eigenschaft. Wenn der Name der Funktion ausgelassen wird, wird dies der Variablenname sein (implizierter Name). Ist die Funktion benannt, wird in der Eigenschaft der Funktionsname zu finden sein (expliziter Name). Dies trifft auch auf Pfeilfunktionen zu (diese haben keinen Namen so dass der Variablenname nur implizit gesetzt werden kann)

var foo = function() {}
foo.name // "foo"

var foo2 = foo
foo2.name // "foo"

var bar = function baz() {}
bar.name // "baz"

console.log(foo === foo2); // true
console.log(typeof baz);   // undefined
console.log(bar === baz);  // false (Fehler, weil baz == undefined)

Beispiele

Das folgende Beispiel definiert eine unbenannte Funktion und weist sie x zu. Die Funktion gibt das Quadrat ihres Argumentes zur├╝ck.

var x = function(y) {
   return y * y;
};

Meistens werden Funktionsausdr├╝cke in Callbacks genutzt:

button.addEventListener('click', function(event) {
    console.log('button wurde geklickt!')
})

Spezifikationen

Browserkompatibilit├Ąt

BCD tables only load in the browser

Siehe auch