Tobias Feldherr
20. September 2023

JavaScript Scope & Closures

Was bedeutet Scope und Closure im Kontext von JavaScript? In unserem neuesten Artikel erläutert Tobias Schießl die Unterschiede zwischen globalen und lokalen Sichtbarkeitsbereichen (Scopes) und wie Sie Funktionsabschlüsse (Closures) effektiv für Ihren Code nutzen können. Erweitern Sie Ihr JavaScript-Knowhow und lesen Sie praxisnahe Beispiele, die Ihnen das Verständnis erleichtern. Jetzt mehr lesen!

Scope – Sichtbarkeitsbereich

Der Sichtbarkeitsbereich gibt den Bereich an in denen Variablen oder Funktionen angesprochen werden können. Letztendlich kann eine Variable oder eine Funktion lediglich in einem globale oder in einem lokalen Sichtbarkeitsbereich definiert werden.

Global Scope – globaler Sichtbarkeitsbereich

Wird eine Variable außerhalb einer Funktion deklariert, ist sie global erreichbar. Jeder Code innerhalb unserer Anwendung kann die Variable erreichen. Schauen wir uns dafür folgendes zur Berechnung des Kreisumfangs an:

Scope & Closures: Beispiel für globalen Scope (Sichtbarkeitsbereich)

Innerhalb unserer Funktion können wir die global definierten Variablen erreichen und mit Ihnen arbeiten. Der Funktionsaufruf liefert uns den gewünschten Kreisumfang.

Local Scope – lokaler Sichtbarkeitsbereich

Im Gegensatz zum globalen Sichtbarkeitsbereich, steht der lokale Sichtbarkeitsbereich. Wird eine Variable innerhalb einer Funktion deklariert, ist sie nur lokal innerhalb dieser Funktion erreichbar und hat damit eine lokale Sichtbarkeit. Kommen wir nochmal auf unser Beispiel in einer veränderten variante zurück:

Scope & Closures: Beispiel für lokalen Scope (Sichtbarkeitsbereich)

Die lokalen Variablen in diesem Beispiel wird erst initialisiert und deklariert sobald die Funktion createVariables() aufgerufen wird. Nachdem die Funktion jedoch beendet ist, werden auch die darin erstellten Variablen gelöscht. Somit stehen uns die Variablen in der Funktion calculateCircumference() nicht mehr zur Verfügung und wir bekommen eine Fehler.

In geschachtelten Schleifen lässt sich das Prinzip des Sichtbarkeitsbereichs ebenfalls an folgendem Beispiel verdeutlichen:

Die Innere Funktion calculateCircumference() benötigt in diesem Fall nicht den Übergabeparameter „radius“ um diesen zu verwenden. Der Parameter steht in der umschließenden Funktion zur Verfügung und unsere innere Funktion hat vollen Zugriff auf diesen. Dies nennen wir wie gesagt Sichtbarkeitsbereiche von Variablen und Funktionen.

E-Book App-Entwicklung

E-Book: App-Entwicklung

In diesem E-Book erhalten Sie eine Übersicht über die Entwicklung von Enterprise-Apps mit SAPUI5 und OData.

Closures

Nachdem wir nun wissen was der Scope oder auch Sichtbarkeitsbereich ist gehen wir nun auf die Closures oder auch Funktionsabschlüsse genannt ein. Dazu schauen wir uns das folgende Beispiel an:

Scope & Closures: Beispiel für Closures (Funktionsabschlüsse)

Versuchen Sie einmal selbst den Quellcode nachzuvollziehen. Die Ausgabe nach Aufruf des alerts beträgt 8. Lassen Sie uns kurz zusammen durchgehen was genau hier passiert ist.

  1. Wenn die Funktion add aufgerufen wird, wird die innere Funktion zurückgegeben
  2. Die innere Funktion schließt den Kontext ab und speichert sich den Parameter „x“ mit dem Wert 5 ab.
  3. Die Variable „five“ verweist nun auf die innere Funktion mit dem Parameter x = 5.
  4. Jedes Mal, wenn nun die Variable „five“ mit einem Parameter aufgerufen wird, wird der Parameter zu der fünf addiert.
  5. Mit dem Aufruf five(3), wird der Variable „eight“ eine acht zugeordnet.

Die äußere Funktion add nennen wir in diesem Zusammenhang die sogenannten Closure. Funktionen, die in einer Closure definiert werden, merken sich Ihre Umgebung in der Sie erzeugt wurden.

Vielleicht haben Sie schon einmal versucht in einer ganz normalen Schleife die Zählervariable „i“ in irgendeiner Weise einem Objekt zuzuordnen. Haben Sie festgestellt, dass immer nur der letzte Wert von „i“ Ihrem Objekt zugeordnet wird? Lassen Sie uns dies anhand eines Beispiels durchgehen:

Der dargestellt Quellcode erstellt 5 verschiedene Links. Die Variable „i“ wird in jedem Schleifendurchgang einen hochgezählt und Sie erhalten somit folgende Ausgabe:

Link 0 Link 1 Link 2 Link 3 Link 4

Wir erwarten nun sobald wir einen der Links anklicken auch die entsprechende Zahl im alert ausgegeben zu bekommen, da wir in unserer Schleife dem Link die onclick-Funktion mit dem entsprechenden Wert „i“ an der Stelle zugeordnet haben. Jedoch, gleichwohl welchen Link wir anklicken, es wird immer die Zahl 5 ausgegeben. Doch woran liegt das?

Der Grund dafür ist, dass die Variable „i“ in jedem Schleifendurchlauf einen hochgezählt wird und solange keiner der Links innerhalb des Durchlaufens der Schleife (was leider praktisch nicht möglich ist, da die Links erst generiert werden) angeklickt wird, jeder Link den letzten Wert von „i“, nämlich fünf in seiner onClick-Funktion zugeordnet bekommt.

Richtige Referenzen mit Funktionsabschlüssen

Mithilfe eines Funktionsabschlusses können Sie Ihrem Link den Wert zuordnen, den dieser exakt in dem Schleifendurchlauf besessen hat.

Die Lösung für Ihr Problem ist wieder die sogenannte Closure. Sobald einer der Links angeklickt wird, wird die Funktion function (num) aufgerufen. Diese bildet die Closure und referenziert den Parameter (num) welcher die Variable „i“ in exakt diesem Schleifendurchlauf ist. Die Funktion schließt also mit dem Wert der in „i“ gespeichert ist nach jedem Schleifendurchlauf ab und merkt sich diesen, deswegen auch der Name Funktionsabschluss (closure).

Profilbild Tobias Schießl

Websession mit Tobias Schießl

Ich hoffe, der Artikel hat Ihnen die Sichtbarkeitsbereiche und Funktionsabschlüsse nähergebracht. Lassen Sie uns Ihre Fragen in einer kostenlosen Websession klären!

FAQ

Wofür steht Scope?

Der „Scope“ oder „Sichtbarkeitsbereich“ in JavaScript definiert, in welchem Bereich eine Variable oder eine Funktion sichtbar und damit nutzbar ist. Man unterscheidet hier zwischen dem globalen und dem lokalen Sichtbarkeitsbereich. Während globale Variablen in der gesamten Anwendung nutzbar sind, sind lokale Variablen nur innerhalb der Funktion sichtbar, in der sie deklariert wurden.

Wofür steht Closure?

„Closure“ oder „Funktionsabschluss“ bezieht sich auf Funktionen in JavaScript, die sich den Kontext, in dem sie erzeugt wurden, „merken“. Dies bedeutet, dass sie auf Variablen aus ihrem Umgebungsbereich zugreifen können, selbst nachdem die äußere Funktion beendet wurde. Closures erlauben es somit, spezifische Informationen zu speichern und zu nutzen, was in verschiedenen Szenarien, wie etwa bei Event-Handlern in Schleifen, nützlich sein kann.

Welche Sichtbarkeitsbereiche gibt es?

Man unterscheidet zwischen zwei Hauptarten von Sichtbarkeitsbereichen: dem „globalen“ und dem „lokalen“ Sichtbarkeitsbereich. Im globalen Sichtbarkeitsbereich sind Variablen überall in Ihrer Anwendung sichtbar. Im lokalen Sichtbarkeitsbereich sind sie hingegen nur in der Funktion sichtbar, in der sie erstellt wurden. Darüber hinaus kann man durch geschachtelte Funktionen zusätzliche Sichtbarkeitsbereiche erzeugen, wobei innere Funktionen Zugriff auf die Variablen der umgebenden äußeren Funktionen haben.

Tobias Feldherr

Tobias Feldherr

Als Management & Technologieberater im Bereich Mobility verbinde ich tiefgehende fachliche Expertise mit langjährigem Projektleitungs-Know-How. Diese Kombination liefert mir die Grundlage, meine Kunden-Projekte zum Erfolg zu führen. Gerne unterstütze ich Sie bei den Themen mobile Infrastrukturen und App-Entwicklung mit SAPUI5 oder Low-Code.

Sie haben Fragen? Kontaktieren Sie mich!


Weiterführende Inhalte

Unser E-Book zum Thema SAP Fiori
Unser E-Book zum Thema "App-Entwicklung mit OData & SAPUI5"

Verwandte Beiträge

Konnektoren spielen eine wesentliche Rolle bei der Entwicklung einer Applikation mit Simplifier. Sie dienen dem Persistieren von Daten und können sich mit verschiedenen, externen IT-Landschaften verbinden, um an die benötigten […]

weiterlesen

Dass SAP mit Fiori noch so einiges in Planung hat, um die SAP-Oberflächen aller Endanwender auf ein neues Level zu heben und die User Experience noch weiter zu optimieren, war […]

weiterlesen

Wenn es um das Anzeigen von Systemdaten für den Benutzer geht, kommt man nicht drum herum, mit Datums- und Zeitangaben in Berührung zu kommen.

weiterlesen

Unsere Produkte zu JavaScript Scope & Closures

So viele mobile App-Ideen und keine Zeit? Sie wollen eine App umsetzen, wissen aber nicht, wie? Unsere App Entwickler beraten Sie und setzen Ihre App-Ideen um. Dabei behalten Sie die volle […]

Mehr Informationen

Mit unserer App Factory bekommen Sie eine neuartige App zum Festpreis, die Ihre Endkunden begeistern wird!

Mehr Informationen

Dieser Workshop bietet sich für alle Unternehmen an, die ihre Mitarbeiterzufriedenheit mit der Verwendung von intuitiven Anwendungen steigern wollen.

Mehr Informationen

Schreiben Sie einen Kommentar

Bitte füllen Sie alle mit * gekennzeichneten Felder aus. Ihre E-Mail Adresse wird nicht veröffentlicht.





Kontaktieren Sie uns!
Sophie Weber
Sophie Weber Kundenservice