2009-04-28 4 views
12

Wenn setTimeout verwenden, müssen Sie den Code, den Sie in einen String ausführen möchten setzen:setTimeout - Wie vermeidet man die Verwendung von String für den Rückruf?

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 die 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 um als Parameter an anderen Funktionen übergibt, in dem die setTimeout genannt wird)

Natürlich, wenn das Timeout auslöst, myGreatFunction ist keine erkannte Funktion, so dass es nicht ausgeführt wird.

Ich wünsche Javascript lassen Sie mich dies tun, aber es funktioniert nicht:

setTimeout(function() { myGreatFunction(); }, 1000); 

Gibt es eine schöne Möglichkeit, rund um das?

+4

„Wenn setTimeout verwenden, müssen Sie den Code, den Sie in einen String ausführen möchten setzen“ Du sicherlich nicht ... in der Tat, Sie not_ _should. –

+0

@Tomalak - ja, du hast Recht. Siehe den Kommentar zu Kirtans Antwort ...:/ – teedyay

+0

Eigentlich habe ich es gesehen; wollte nur hier explizit sein um jemand anderen, der die Frage sehen könnte :) –

Antwort

28

Wenn Sie myGreatFunction nicht mit irgendwelchen Argumenten aufrufen müssen, sollten Sie in der Lage sein setTimeout eine Funktion Referenz zu übergeben:

setTimeout(myGreatFunction, 1000); 

Außerdem sollten Sie immer vermeiden setTimeout Code vorbei, die es bewerten muss (was passiert, wenn Sie den Code in Anführungszeichen setzen. Stattdessen wickeln Sie den Code in einer anonymen Funktion:

setTimeout(function() { 
    // Code here... 
}, 1000); 

die setTimeout page at the Mozilla Development Centre für weitere Informationen.

Steve

14

Wer hat gesagt, dass es dich nicht lässt?

Es tut der Code -

setTimeout(function() { myFunction(); }, 1000); 

ist vollkommen gültig.

+9

Haha - ja, du hast Recht. Ein nicht zusammenhängender Fehler bedeutete, dass meine Funktion nicht aufgerufen wurde, als sie tatsächlich war. Das bringt mich in die etwas peinliche Lage, meine eigene Frage abstimmen zu wollen ... – teedyay

Verwandte Themen