Funktion erster Klasse

Funktionen, die wie jede andere Variable behandelt werden, bezeichnet man als Funktionen erster Klasse.

In einer Programmiersprache, die ├╝ber Funktionen erster Klasse verf├╝gt, kann so eine Funktion als Argument anderen Funktionen ├╝bergeben werden, als Wert einer Variable zugewiesen, oder von einer anderen Funktion zur├╝ckgegeben werden.

Beispiel | Zuweisung einer Funktion an eine Variable

JavaScript

const foo = function() {
   console.log("foobar");
}
// Aufruf der Funktion ├╝ber die Variable.
foo();

Wir weisen der Variable 'foo' eine anonyme Funktion, die den String "foobar" in der Konsole ausgibt, zu. Dann rufen wir diese Funktion ├╝ber die Variable auf, indem wir ein Paar Klammern an das Ende hinzuf├╝gen. 

Auch wenn die Funktion benannt ist, kann der Name der Variable, der sie zugewiesen ist, benutzt werden, um die Funktion aufzurufen. Funktionen zu benennen wirkt sich nicht auf die Weise, wie sie aufgerufen wird aus, kann aber beim Debuggen hilfreich sein

Beispiel | ├ťbergeben einer Funktion als Argument

JavaScript

function sagHallo() {
   return "Hallo, ";
}
function gruessen(gruss, name) {
  console.log(gruss() + name);
}
// ├ťbergebe `sagHallo` als Argument an die `gruessen` Funktion.
gruessen(sagHallo, "JavaScript!");

Wir ├╝bergeben unsere sagHallo() Funktion als ein Argument an die gruessen() Funktion. Auf diese Art behandeln wir die Funktion als Wert.

Die Funktion, die wir als Argument einer anderen Funktion ├╝bergeben wird als Callback function bezeichnet. sagHallo() ist eine Callback function.

Example | Return a function

JavaScript

function sayHello() {
   return function() {
      console.log("Hello!");
   }
}

In this example; We need to return a function from another function - We can return a function because we treated function in JavaScript as a value.

A function that returns a function called Higher-Order Function

Back to our example; Now, we need to invoke sayHello function and its returned Anonymous Function. To do so, we have two ways:

1- Using a variable

const sayHello = function() {
   return function() {
      console.log("Hello!");
   }
}
const myFunc = sayHello();
myFunc();

This way, it returns the Hello! message.

You have to use another variable. If you invoked sayHello directly, it would return the function itself without invoking its returned function.

2- Using double parentheses

function sayHello() {
   return function() {
      console.log("Hello!");
   }
}
sayHello()();

We are using double parentheses ()() to invoke the returned function as well.

Learn more

General knowledge