Warum wird die Funktion sofort ausgeführt, wenn ich setTimeout verwende?

Lesezeit: 4 Minuten

Adlers Benutzeravatar
Adler

Ich versuche, einfachen Code mit a zu schreiben setTimeoutaber die setTimeout wartet einfach nicht so lange, wie es soll, und der Code wird sofort ausgeführt. Was mache ich falsch?

setTimeout(testfunction(), 2000);

  • () fungiert hier als Aufrufoperator. Aber Sie möchten die Funktion an übergeben setTimeoutnicht aufrufen.

    – Šime Vidas

    21. August 2011 um 9:24

  • Duplikat von Warum wird mein von setTimeout geplanter Funktionsaufruf sofort ausgeführt?, Das Aufrufen von Funktionen mit setTimeout(), Javascript setTimeout() ignoriert die Timeout-Länge

    – outis

    9. November 2011 um 21:43

Mats Benutzeravatar
Matte

Sie rufen die Funktion sofort auf und planen ihren Rückgabewert.

Verwenden:

setTimeout(testFunction, 2000);
                       ^

Hinweis: keine Eltern.

  • ok, danke.. aber gibt es eine Möglichkeit, Parameter wie setTimeout(testFunction(obj),2000) an die Funktion zu senden??! Übrigens wird das auch nicht funktionieren setTimeout(alert(“test”),2000)..

    – Adler

    21. August 2011 um 9:24

  • @Adler: Ja: setTimeout(function() { alert("test"); }, 2000);

    – TJ Crowder

    21. August 2011 um 9:25

  • @Adler: Das ist möglich setTimeout(alert, 2000, "test") aber es wird vom IE nicht unterstützt.

    – pimvdb

    21. August 2011 um 9:26 Uhr

  • @Adler: Siehe auch: stackoverflow.com/questions/1190642/…

    – Matte

    21. August 2011 um 9:27 Uhr

Benutzeravatar von Jose Faeti
José Faeti

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 hat vorgeschlagen, einen String als ersten Parameter von setTimeout zu senden. Ich würde vorschlagen, dies nicht zu befolgen und niemals einen String als ersten setTimeout-Parameter zu senden, da die Eval-Funktion verwendet wird. Dies ist eine schlechte Praxis und sollte nach Möglichkeit vermieden werden.

Benutzer-Avatar von Emil Vikström
Emil Vikström

Entfernen Sie die Klammern nach dem testfunction Name:

setTimeout(testfunction, 2000);

Der Grund ist, dass das erste Argument zu setTimeout sollte eine Funktion sein Referenz, nicht der Rückgabewert der Funktion. In Ihrem Code, testfunction wird sofort aufgerufen und der Rückgabewert an gesendet setTimeout.

  • ok, danke.. aber gibt es eine Möglichkeit, Parameter wie setTimeout(testFunction(obj),2000) an die Funktion zu senden??! Übrigens wird das auch nicht funktionieren setTimeout(alert(“test”),2000)…

    – Adler

    21. August 2011 um 9:24


  • @Adler ja, Sie können alle Ihre Argumente nach dem Verzögerungsargument übergeben, so: setTimeout(testFunction, 2000, obj)

    – Brandon McConnell

    29. Mai 2021 um 19:31 Uhr

Shubham Aryas Benutzeravatar
Shubham Arya

Ich sehe hier viele Antworten, aber ich möchte mir einfach etwas Zeit nehmen, um die Grundursache des Problems zu erklären.

Eigentlich ist die Funktion setTimeOut() eine asynchrone Funktion, und wenn Sie eine Funktion als einen der Parameter an die Funktion setTimeOut() übergeben, möchte Ihr Skript eigentlich keine Zeit verschwenden und die übergebene Funktion so schnell wie möglich ausführen.

Es gibt also nur wenige Möglichkeiten, dies zu umgehen. Sie können entweder Rückrufe oder Versprechen verwenden.

Weitere Informationen finden Sie unter diesem Link: https://www.w3schools.com/js/js_promise.asp

Ich zeige Ihnen, wie Sie Callback nutzen können, um das zu erreichen, was Sie erreichen möchten.

Indem du tust –

setTimeOut(your_function_name_without_parentheses, <number of milliseconds>)

Sie können Ihrem Timeout tatsächlich sagen, dass Sie sich bitte zuerst selbst ausführen und dann meine als erster Parameter übergebene Rückruffunktion ausführen.

Oder wenn Sie einen Parameter an die Callback-Funktion übergeben möchten, können Sie so etwas tun:

setTimeOut(() => {your_function_name_with_parentheses(argument_that_you_want_to_pass), <number of milliseconds>})

Es gibt auch andere Möglichkeiten, die oben bereits beantwortet wurden.

Außerdem bin ich ein JS-Neuling. Bitte lassen Sie mich wissen, wenn mein Verständnis Lücken aufweist.

Shraddhas Benutzeravatar
Shraddha

Entfernen Sie zunächst die Klammer:

setTimeout(testfunction, 2000);

Und dann, wenn Sie Parameter übergeben möchten setTimeout Funktion können Sie auf diese Weise übergeben:

 setTimeout(testfunction, 2000, param1, param2);

Notiz: Sie können je nach Funktionsanforderung mehrere Parameter übergeben.

Benutzeravatar von shaILU
shaILU

Nun, Sie haben vielleicht die Antwort bekommen, aber ich erkläre die Ursache und Lösung. Es gibt zwei Möglichkeiten, eine Funktion nach der erforderlichen Zeit aufzurufen.

1. setTimeout(“FUNC_NAME ()’, TIME_IN_MS);
Hier ist FUNC_NAME in doppelten Anführungszeichen die ursprüngliche Funktion, die Sie nach TIME_IN_MS Millisekunden aufrufen möchten. Dies liegt daran, dass, wenn Sie die Anführungszeichen nicht setzen, die Funktion während der Interpretation des Java-Skripts sofort ausgeführt wird und Ihr Zweck vereitelt wird. Damit der Interpreter die Aussage ü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, die Funktion nach einer bestimmten Zeit auszuführen, anstatt die Zeit auszuwerten.

Danke, shaILU

Benutzeravatar von Jonathan Utsu Undelikwo
Jonathan Utsu Undelikwo

Entfernen Sie die Klammer. Derzeit rufen Sie die Funktion sofort auf. Was derzeit an setTimeout übergeben wird, ist der vom testfunction()-Aufruf zurückgegebene Wert, aber was Sie als erstes Argument an setTimeout übergeben sollten, ist eine Funktionsreferenz

setTimeout(testfunction, 2000);

  • Vielen Dank für den Beitrag, aber erläutern Sie bitte, inwiefern dies den bereits seit einem Jahrzehnt bestehenden Antworten etwas hinzufügt.

    – ggorlen – zum LLM-Streik

    31. Juli 2021 um 18:33 Uhr


1454060cookie-checkWarum wird die Funktion sofort ausgeführt, wenn ich setTimeout verwende?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy