SetTimeout - wie mit Zeichenfolge für den Rückruf zu vermeiden?
-
18-09-2019 - |
Frage
Wenn setTimeout
verwenden, müssen Sie den Code, den Sie in einen String ausführen möchten setzen:
setTimeout('alert("foobar!");', 1000);
Allerdings möchte ich eine Funktion auszuführen, zu dem ich einen Verweis in einer Variablen haben. Ich möchte in der Lage sein, dies zu tun:
var myGreatFunction = function() { alert("foobar!"); };
// ...
setTimeout('myGreatFunction();', 1000);
(Obwohl im wirklichen Leben, die Warnung ist ein längeres Stück Code und myGreatFunction
wird als Parameter an anderen Funktionen übergeben um, innerhalb denen die setTimeout
genannt wird.)
Natürlich, wenn das Timeout auslöst, myGreatFunction
ist nicht eine anerkannte Funktion, so dass es nicht ausgeführt.
Ich wünsche Javascript lassen Sie mich dies tun, aber es funktioniert nicht:
setTimeout(function() { myGreatFunction(); }, 1000);
Gibt es eine schöne Möglichkeit, runden das?
Lösung
Wenn Sie nicht myGreatFunction
aufrufen müssen mit allen möglichen Argumenten, sollten Sie in der Lage sein, eine Funktion Verweis übergeben setTimeout
:
setTimeout(myGreatFunction, 1000);
Außerdem sollten Sie immer vermeiden setTimeout
Code vorbei, die sie bewerten muss (das ist, was passiert, wenn Sie den Code in Anführungszeichen wickeln). Stattdessen wickeln Sie den Code in einer anonymen Funktion:
setTimeout(function() {
// Code here...
}, 1000);
Sehen Sie die SetTimeout Seite im Mozilla Development Center für weitere Informationen .
Steve
Andere Tipps
Wer hat gesagt, dass es nicht lassen Sie es tun?
Es tut der Code -
setTimeout(function() { myFunction(); }, 1000);
ist vollkommen gültig.