Ich versuche, einen einfachen Code mit a zu schreiben setTimeout
, aber der setTimeout
wartet nicht so lange, wie es angenommen wird, und der Code wird sofort ausgeführt. Was mache ich falsch?
setTimeout(testfunction(), 2000);
javascript
settimeout
Adler
quelle
quelle
()
fungiert hier als Aufrufoperator. Sie möchten die Funktion jedoch an übergebensetTimeout
und nicht aufrufen.Antworten:
Sie rufen die Funktion sofort auf und planen ihren Rückgabewert.
Verwenden:
setTimeout(testFunction, 2000); ^
Hinweis: keine Parens.
quelle
setTimeout(function() { alert("test"); }, 2000);
setTimeout(alert, 2000, "test")
aber vom IE nicht unterstützt.Entfernen Sie die Klammer
setTimeout(testfunction(), 2000);
Wenn Sie Parameter an die Funktion senden möchten, können Sie eine anonyme Funktion erstellen, die dann die gewünschte Funktion aufruft.
setTimeout(function() { testfunction('hello'); }, 2000);
Bearbeiten
Jemand schlug vor, eine Zeichenfolge als ersten Parameter von setTimeout zu senden. Ich würde vorschlagen, dies nicht zu befolgen und niemals einen String als ersten Parameter für setTimeout zu senden, da die Funktion eval verwendet wird. Dies ist eine schlechte Praxis und sollte nach Möglichkeit vermieden werden.
quelle
Entfernen Sie die Klammern nach dem Namen der Testfunktion:
setTimeout(testfunction, 2000);
Der Grund dafür ist , dass das erste Argument SetTimeout eine Funktion sein sollte Bezug , nicht der Rückgabewert der Funktion.
testfunction
Wird in Ihrem Code sofort aufgerufen und der Rückgabewert an setTimeout gesendet.quelle
Nun, Sie haben vielleicht die Antwort bekommen, aber ich erkläre die Ursache und Lösung. Es gibt zwei Möglichkeiten, wie Sie eine Funktion nach der erforderlichen Zeit aufrufen können.
1. setTimeout ("FUNC_NAME () ', TIME_IN_MS);
Hier ist FUNC_NAME in doppelten Anführungszeichen die ursprüngliche Funktion, die Sie nach Millisekunden TIME_IN_MS aufrufen möchten. Dies liegt daran, dass die Funktion ausgeführt wird, wenn Sie die Anführungszeichen nicht setzen, während das Java-Skript interpretiert wird sofort ausgeführt werden und Ihr Zweck würde
zunichte gemacht werden . Damit der Interpreter die Anweisung überspringen kann, müssen wir hier Anführungszeichen setzen. 2. setTimeout (function () {FUNC_NAME ()}, TIME_IN_MS);
Hier wird eine anonyme Funktion erstellt, die den Interpreter anweist , if auszuführen nach einer bestimmten Zeit statt Zeit auszuwerten.
Danke shaILU
quelle
Entfernen Sie zuerst die Klammer:
setTimeout(testfunction, 2000);
Und dann, wenn Sie Parameter in
setTimeout
Funktion übergeben möchten , können Sie auf folgende Weise übergeben:setTimeout(testfunction, 2000, param1, param2);
Hinweis: Sie können je nach Funktionsanforderung mehrere Parameter übergeben.
quelle