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!