So übergeben Sie Parameter an setTimeout und setInterval
Sehen Sie sich den folgenden Code an:
var str = 'aaa'; var num = 2; function auto(num){ alert(num); } setTimeout('auto(num)',4000);
So etwas zu schreiben kann normal funktionieren, aber anstatt zu sagen, dass es sich um eine Parameterübergabe handelt, ist es besser zu sagen, dass es sich um eine direkt verwendete globale Variable handelt. Daher ist diese Schreibweise nicht erforderlich. Im Allgemeinen werden lokale Variablen als Parameter übergeben.
Ändern Sie den Code:
//var str = 'aaa'; var num = 2; function test(){ var str = 'bbb'; setTimeout('auto(str)',4000); } function auto(a){ alert(a); } test();
Diese Schreibweise meldet einen Fehler. Wenn Sie die globale Deklaration von str auskommentieren, wird aaa ausgegeben, das heißt, die Funktion ruft weiterhin die globale Variable auf.
Schauen Sie sich den folgenden Code an:
//var str = 'aaa'; var num = 2; function test(){ var str = 'bbb'; setTimeout('auto("str")',4000); } function auto(a){ alert(a); } test();
Achten Sie auf die obige Zeichenfolge. Wenn Sie auf diese Weise schreiben, wird „str“ ausgegeben, was bedeutet, dass str direkt als Parameter verwendet wird, nachdem der Timer die Funktion aufgerufen hat. Auf diese Weise übergebene Parameter sind immer Zeichenfolgen. Das ist nicht das Ergebnis, das wir wollen.
Um andere Parameter als Zeichenfolgen zu übergeben, können Sie Abschlüsse verwenden, siehe folgenden Code:
//var str = 'aaa'; var num = 2; function test(){ var str = 'bbb'; setTimeout(auto(str),4000); } function auto(str){ return function(){ alert(str); } } test();
Das Ausgabeergebnis ist „bbb“. Wenn Sie Anführungszeichen zu auto(str) hinzufügen, wird ebenfalls ein Fehler gemeldet.
Natürlich ist es auch gut, so zu schreiben:
var num = 2; function test(){ var str = 'bbb'; //setTimeout(auto(str),4000); setTimeout(function(){alert(str)},4000); } function auto(str){ return function(){ alert(str); } } test();
Als Letztes ist zu beachten, dass die vom Timer aufgerufene Funktion ohne Anführungszeichen in Anführungszeichen gesetzt werden muss, wenn Sie keine Abschlüsse zum Übergeben von Parametern verwenden. Die obige Situation eignet sich auch für setInterval();
Funktionsaufrufe in setTimeout und setInterval
hat den folgenden Code:
var num = 2; function auto(){ alert(num); } setTimeout(auto(),4000);
Ebenso funktioniert die obige Schreibmethode für setInterval nicht ordnungsgemäß. Das Programm kann nur einmal ein Warnfeld anzeigen und dann einen Fehler melden.
Ändern Sie den Timer auf
setInterval('auto()',4000); setTimeout('auto()',4000);
Wie sieht es aus, wenn Sie zum Aufrufen einer Funktion nicht auto(), sondern einfach auto verwenden?
var str = 'aaa'; var num = 2; function auto(){ alert(num); } //setInterval(auto,4000); setTimeout(auto,4000);
Wenn Sie automatisch Anführungszeichen hinzufügen
//setInterval('auto',4000); setTimeout('auto',4000);