Heim >Web-Frontend >js-Tutorial >Wie kann ich in JavaScript Funktionen erstellen, die nur einmal ausgeführt werden?

Wie kann ich in JavaScript Funktionen erstellen, die nur einmal ausgeführt werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-22 22:55:02628Durchsuche

How Can I Create Functions That Execute Only Once in JavaScript?

Ein detaillierter Blick auf Einzelausführungsfunktionen in JavaScript

Eine häufige Anforderung bei der Programmierung besteht darin, Funktionen zu erstellen, die nur einmal ausgeführt werden können . Während Ihnen vielleicht die Verwendung statischer Variablen in Sprachen wie C und Java in den Sinn kommt, bietet JavaScript eine elegante Alternative: Abschlüsse.

Abschlüsse verstehen

Abschlüsse in JavaScript sind Funktionen, die Folgendes haben Zugriff auf den Umfang ihrer übergeordneten Funktionen, auch nachdem die übergeordneten Funktionen zurückgekehrt sind. Durch die Verwendung von Abschlüssen können wir eine Funktion erstellen, die nachverfolgt, ob sie bereits ausgeführt wurde.

Betrachten Sie das folgende Beispiel:

<code class="javascript">var something = (function() {
    var executed = false;
    return function() {
        if (!executed) {
            executed = true;
            // Do something
        }
    };
})();

something(); // "Do something" happens
something(); // Nothing happens</code>

In diesem Beispiel erstellt die äußere Funktion einen Abschluss um die innere Funktion. Die innere Funktion prüft, ob das Flag „Ausgeführt“ auf „false“ gesetzt ist, was darauf hinweist, dass es noch nie zuvor ausgeführt wurde. Bei „false“ wird das Flag auf „true“ gesetzt und die gewünschte Aktion ausgeführt. Bei nachfolgenden Aufrufen bleibt das Flag „Ausgeführt“ wahr, sodass die Funktion nichts tut.

Bibliotheksfunktionen von Drittanbietern

Verschiedene JavaScript-Bibliotheken von Drittanbietern, z. B. Underscore und Ramda bieten Hilfsfunktionen wie Once(). Diese Funktionen akzeptieren eine andere Funktion als Argument und geben eine Funktion zurück, die die angegebene Funktion genau einmal ausführt. Die zurückgegebene Funktion speichert auch den Wert aus der ersten Ausführung zwischen und gibt ihn bei nachfolgenden Aufrufen zurück.

Eine bemerkenswerte Implementierung wird von David Walsh bereitgestellt:

<code class="javascript">function once(fn, context) {
    var result;
    return function() {
        if (fn) {
            result = fn.apply(context || this, arguments);
            fn = null;
        }
        return result;
    };
}</code>

Diese Funktion erstellt einen Abschluss um das angegebene Funktion (fn) und einem Kontext (context). Bei der ersten Ausführung wird das Ergebnis auf den Rückgabewert von fn und fn auf null gesetzt, wodurch zukünftige Ausführungen effektiv verhindert werden. Bei nachfolgenden Aufrufen wird einfach das zwischengespeicherte Ergebnis zurückgegeben.

Verwendung

Die Verwendung dieser Einzelausführungsfunktionen ist unkompliziert. Übergeben Sie die Funktion, die Sie ausführen möchten, einfach einmal an die Dienstprogrammfunktion, und die zurückgegebene Funktion kann bei Bedarf aufgerufen werden, ohne dass Sie Bedenken hinsichtlich einer erneuten Ausführung haben müssen.

Zum Beispiel mit der Implementierung von David Walsh:

<code class="javascript">function something() { /* Do something */ }
var one_something = once(something);

one_something(); // "Do something" happens
one_something(); // Nothing happens</code>

Fazit

Abschlüsse und Hilfsfunktionen bieten elegante Möglichkeiten, Einzelausführungsfunktionen in JavaScript zu erstellen. Wenn Sie diese Techniken verstehen und anwenden, können Sie Situationen effizient bewältigen, in denen eine bestimmte Funktionalität nur einmal ausgeführt werden sollte.

Das obige ist der detaillierte Inhalt vonWie kann ich in JavaScript Funktionen erstellen, die nur einmal ausgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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