Heim Web-Frontend js-Tutorial Abschlüsse in JavaScript verstehen

Abschlüsse in JavaScript verstehen

Aug 24, 2024 am 11:11 AM

Understanding Closures in JavaScript

Abschlüsse sind ein grundlegendes Konzept in JavaScript, das sich erheblich darauf auswirken kann, wie Sie Ihren Code schreiben und verstehen. Im Wesentlichen ermöglicht ein Abschluss einer Funktion den Zugriff auf Variablen aus ihrem äußeren Bereich, selbst nachdem die Ausführung dieser äußeren Funktion abgeschlossen ist. Diese Fähigkeit kann unglaublich leistungsfähig sein, erfordert aber auch ein solides Verständnis, um sie effektiv nutzen zu können. Lassen Sie uns in die Details eintauchen.

Was ist eine Schließung?

Ein Abschluss ist eine Funktion, die die lexikalische Umgebung erfasst, in der sie erstellt wurde. Dies bedeutet, dass die Funktion weiterhin Zugriff auf die Variablen aus ihrem äußeren Bereich hat, selbst nachdem die äußere Funktion die Ausführung abgeschlossen hat. In JavaScript werden Abschlüsse jedes Mal erstellt, wenn eine Funktion innerhalb einer anderen Funktion definiert wird.

Grundlegendes Beispiel

Um Abschlüsse zu verstehen, betrachten wir ein einfaches Beispiel:

1

2

3

4

5

6

7

8

9

10

11

12

function outerFunction() {

    let outerVariable = 'I am an outer variable';

 

    function innerFunction() {

        console.log(outerVariable); // Inner function can access the outer variable

    }

 

    return innerFunction;

}

 

const myClosure = outerFunction();

myClosure(); // Logs: "I am an outer variable"

Nach dem Login kopieren

In diesem Beispiel:

  1. OuterFunction deklariert eine lokale Variable OuterVariable und eine innere Funktion InnerFunction.
  2. innerFunction protokolliert die äußere Variable und demonstriert den Zugriff auf die äußere Variable.
  3. OuterFunction gibt InnerFunction zurück und erstellt einen Abschluss.
  4. myClosure, das den Verweis auf innerFunction enthält, hat auch nach Abschluss von äußerer Funktion weiterhin Zugriff auf äußere Variable.

Lexikalischer Geltungsbereich und Abschlüsse

Der lexikalische Geltungsbereich von JavaScript bedeutet, dass der Geltungsbereich einer Funktion davon abhängt, wo sie definiert ist, und nicht davon, wo sie aufgerufen wird. Abschlüsse machen sich diesen Bereichsmechanismus zunutze und ermöglichen es Funktionen, auf Variablen aus ihren äußeren Bereichen zuzugreifen, selbst nachdem die äußere Funktion zurückgekehrt ist.

Praxisbeispiel: Private Variablen

Abschlüsse werden häufig zum Erstellen privater Variablen verwendet, bei denen es sich um Variablen handelt, auf die von außerhalb ihrer enthaltenden Funktion nicht zugegriffen werden kann:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

function createCounter() {

    let count = 0;

 

    return {

        increment: function() {

            count++;

            return count;

        },

        decrement: function() {

            count--;

            return count;

        }

    };

}

 

const counter = createCounter();

console.log(counter.increment()); // 1

console.log(counter.increment()); // 2

console.log(counter.decrement()); // 1

Nach dem Login kopieren

Hier:

  1. createCounter initialisiert count und gibt ein Objekt mit Inkrementierungs- und Dekrementierungsmethoden zurück.
  2. Beide Methoden bilden Abschlüsse, die die Anzahl erfassen und ändern, die privat bleibt.

Fortgeschrittenes Beispiel: Iteratoren

Abschlüsse können auch verwendet werden, um zustandsbehaftete Iteratoren zu erstellen, die den internen Zustand über Funktionsaufrufe hinweg beibehalten:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

function createIterator(array) {

    let index = 0;

 

    return {

        next: function() {

            if (index < array.length) {

                return { value: array[index++], done: false };

            } else {

                return { value: undefined, done: true };

            }

        }

    };

}

 

const iterator = createIterator([1, 2, 3]);

console.log(iterator.next()); // { value: 1, done: false }

console.log(iterator.next()); // { value: 2, done: false }

console.log(iterator.next()); // { value: 3, done: false }

console.log(iterator.next()); // { value: undefined, done: true }

Nach dem Login kopieren

In diesem Beispiel:

  1. createIterator erfasst das Array und den Index in einem Abschluss.
  2. Die nächste Methode verwendet den erfassten Index, um Array-Elemente einzeln zurückzugeben.

Häufiger Fallstrick: Schließungen in Schleifen

Abschlüsse können manchmal zu unerwartetem Verhalten führen, wenn sie innerhalb von Schleifen verwendet werden, insbesondere bei asynchronen Vorgängen. Hier ist ein Beispiel, das das Problem veranschaulicht:

Mit var

1

2

3

4

5

6

for (var i = 0; i < 5; i++) {

    setTimeout(function() {

        console.log(i);

    }, 1000);

}

// Logs: 5 5 5 5 5

Nach dem Login kopieren

In diesem Fall:

  1. Die Schleife wird abgeschlossen und ich bin am Ende 5.
  2. Alle setTimeout-Rückrufe beziehen sich auf dasselbe i, nämlich 5.
Mit let

1

2

3

4

5

6

for (let i = 0; i < 5; i++) {

    setTimeout(function() {

        console.log(i);

    }, 1000);

}

// Logs: 0 1 2 3 4

Nach dem Login kopieren

Hier:

  1. let erstellt für jede Iteration ein neues blockgültiges i.
  2. Jeder setTimeout-Rückruf erfasst ein anderes i, was zur erwarteten Ausgabe führt.

Zusammenfassung

  • Abschluss: Eine Funktion, die sich ihre lexikalische Umgebung merkt und darauf zugreifen kann.
  • Lexikalischer Geltungsbereich: Der Geltungsbereich von Funktionen basiert auf dem Ort, an dem sie definiert sind, und nicht auf dem Aufruf.
  • Private Variablen: Abschlüsse können Variablen kapseln und schützen.
  • Iteratoren: Abschlüsse können den Zustand aufrechterhalten und sequenziellen Zugriff auf Daten ermöglichen.
  • Schleifenfalle: Seien Sie vorsichtig mit var in Schleifen und bevorzugen Sie let, um unerwartetes Verhalten zu vermeiden.

Das Verständnis von Abschlüssen und ihren Nuancen wird Ihre Fähigkeit verbessern, leistungsfähigeren und wartbareren JavaScript-Code zu schreiben. Nutzen Sie diese Prinzipien mit Bedacht, und Sie werden in der Lage sein, Abschlüsse zu nutzen, um komplexe Probleme effektiv zu lösen.

Folgen Sie mir auf: Github Linkedin

Das obige ist der detaillierte Inhalt vonAbschlüsse in JavaScript verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ersetzen Sie Stringzeichen in JavaScript Ersetzen Sie Stringzeichen in JavaScript Mar 11, 2025 am 12:07 AM

Ersetzen Sie Stringzeichen in JavaScript

Benutzerdefinierte Google -Search -API -Setup -Tutorial Benutzerdefinierte Google -Search -API -Setup -Tutorial Mar 04, 2025 am 01:06 AM

Benutzerdefinierte Google -Search -API -Setup -Tutorial

Beispielfarben JSON -Datei Beispielfarben JSON -Datei Mar 03, 2025 am 12:35 AM

Beispielfarben JSON -Datei

10 JQuery Syntax Highlighters 10 JQuery Syntax Highlighters Mar 02, 2025 am 12:32 AM

10 JQuery Syntax Highlighters

8 atemberaubende JQuery -Seiten -Layout -Plugins 8 atemberaubende JQuery -Seiten -Layout -Plugins Mar 06, 2025 am 12:48 AM

8 atemberaubende JQuery -Seiten -Layout -Plugins

Erstellen Sie Ihre eigenen AJAX -Webanwendungen Erstellen Sie Ihre eigenen AJAX -Webanwendungen Mar 09, 2025 am 12:11 AM

Erstellen Sie Ihre eigenen AJAX -Webanwendungen

Was ist ' this ' in JavaScript? Was ist ' this ' in JavaScript? Mar 04, 2025 am 01:15 AM

Was ist ' this ' in JavaScript?

10 JavaScript & JQuery MVC -Tutorials 10 JavaScript & JQuery MVC -Tutorials Mar 02, 2025 am 01:16 AM

10 JavaScript & JQuery MVC -Tutorials

See all articles