Comment passer des paramètres à setTimeout et setInterval
Regardez le code suivant :
var str = 'aaa'; var num = 2; function auto(num){ alert(num); } setTimeout('auto(num)',4000);
Écrire comme ça peut fonctionner normalement, mais plutôt que de dire qu'il s'agit d'un passage de paramètres, il vaut mieux dire que c'est une variable globale utilisée directement. Cette manière d’écrire n’est donc pas nécessaire. En général, les variables locales sont passées en paramètres.
Modifier le code :
//var str = 'aaa'; var num = 2; function test(){ var str = 'bbb'; setTimeout('auto(str)',4000); } function auto(a){ alert(a); } test();
Cette façon d'écrire signalera une erreur. Si vous décommentez la déclaration globale de str, aaa sera affiché, c'est-à-dire que la fonction appelle toujours la variable globale.
Regardez le code ci-dessous :
//var str = 'aaa'; var num = 2; function test(){ var str = 'bbb'; setTimeout('auto("str")',4000); } function auto(a){ alert(a); } test();
Faites attention à str ci-dessus. Écrire de cette façon affichera "str", ce qui signifie qu'après que le minuteur a appelé la fonction, str est directement utilisé comme paramètre. Les paramètres passés ainsi sont toujours des chaînes. Ce n’est pas le résultat que nous souhaitons.
Pour passer des paramètres autres que des chaînes, vous pouvez utiliser des fermetures, voir le code suivant :
//var str = 'aaa'; var num = 2; function test(){ var str = 'bbb'; setTimeout(auto(str),4000); } function auto(str){ return function(){ alert(str); } } test();
Le résultat de sortie est « bbb ». Si vous ajoutez des guillemets à auto(str), une erreur sera également signalée.
Bien sûr, c'est aussi bien d'écrire comme ceci :
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();
La dernière chose à noter est que lorsque vous n'utilisez pas de fermetures pour passer des paramètres, la fonction appelée par le timer doit être entre guillemets, une erreur sera signalée. La situation ci-dessus convient également à setInterval();
Appels de fonctions dans setTimeout et setInterval
a le code suivant :
var num = 2; function auto(){ alert(num); } setTimeout(auto(),4000);
Dans ce programme, vous pouvez voir la boîte d'avertissement contextuelle immédiatement lors du test. En d’autres termes, le timer ne fonctionnera pas si la fonction est référencée selon la méthode ci-dessus.
De même, la méthode d'écriture ci-dessus pour setInterval ne fonctionne pas correctement. Le programme ne peut afficher une boîte d'avertissement qu'une seule fois, puis signaler une erreur.
Changez la minuterie sur
setInterval('auto()',4000); setTimeout('auto()',4000);
Le programme fonctionne bien.
À quoi cela ressemblera-t-il si vous n'utilisez pas auto() pour appeler une fonction, mais utilisez simplement auto ?
var str = 'aaa'; var num = 2; function auto(){ alert(num); } //setInterval(auto,4000); setTimeout(auto,4000);
Tout programme écrit de cette manière peut fonctionner normalement
;Si vous ajoutez des guillemets à auto
//setInterval('auto',4000); setTimeout('auto',4000);
Aucun des deux ne fonctionne correctement.