Javascript: aufrufende Funktion nur einmal
Hier ist ein Stück code:
if (lastPosition == 0) {
callsomemethod(param);
}
Habe ich diese komische situation, wobei ich die Funktion aufrufen callsomemethod(param); auch wenn die if-Bedingung wahr ist, mehr als einmal. In anderen Worten, ich möchte, um sicherzustellen, dass die Funktion callsomemethod wird nur einmal aufgerufen, selbst die if-Anweisung ist wahr, mehr als einmal. Es gibt weitere Dinge innerhalb der if-Anweisung, ich habe gerade diese genommen aus für Einfachheit.
EDIT:: Danke für alle Antworten. Leider hat keiner der Ansatz funktionieren, weil die if-Anweisung innerhalb einer Funktion, und die Funktion mehr als einmal aufgerufen, so wird alles initialisiert wieder. Auch, die Funktion ist in einer IIFE. Wir entschuldigen uns für die nicht alles klar, in den ersten Schuss.
Vielen Dank im Voraus
- Ersetzen Sie es?
callsomemethod = function() { };
- Ich würde sagen, der einfachste Weg wäre einfach zu fügen Sie ein weiteres Feld
methodcalled
zu überprüfen, in der if-Anweisung, die Sie flip auf true beim Aufruf der Methode. Gibt es einen Grund, warum Sie sind, dies nicht zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den idiomatischen Weg, dies zu tun ist mit einer lock-variable, wahlweise über versteckte Schließung. Das einfachste Beispiel wäre:
Zu produzieren Funktionen, die nur einmal aufgerufen werden, können Sie den Verschluss und wickeln Sie, dass:
(die
...args
syntax funktioniert nicht in älteren Browsern und sollten ersetzt werden mit den code zu überprüfenarguments
und übergeben Sie es nach unten, was ich habe, entfallen aus Platzgründen)Dies ist die Grundlage der Helfer wie lodash einmal.
Da JS erlaubt nur einen einzigen thread, um auf Variablen zuzugreifen, dies ist inhärent thread-sicher ist (wie es vorgesehen ist) und wird nicht brechen, wenn Sie mehrere callbacks zu verwenden versuchen, die
once
-freundlich-Methode....
, ist einer von denen ES6 Dinge, die Sie nicht auf ein Stück älteren Browsern.Hinzufügen einer Kennzeichnung zu verfolgen, wenn die Funktion aufgerufen wird, die zuvor oder nicht:
Fortgeschrittener, nutzen Sie die Verschlüsse zu wickeln die ganze Sache:
Deklarieren Sie eine Globale variable var ran=false, auf true eingestellt, innerhalb callsomethingmethod, und erweitern Sie Ihre wenn wie:
Haben, könnten Sie einen boolean namens
called
dass Sie true, wenn Sie die Methode aufrufen, die erste Zeit:Hier ist eine andere Weise, aber ähnlich zu den vorherigen Antworten. Sie können Funktion Prototyp bis zum Anruf hinzufügen-einmal Verhalten. Im folgenden code nur den ersten Aufruf Druckergebnisse.