Maison > interface Web > js tutoriel > le corps du texte

Passage de paramètres et appel des fonctions setTimeout et setInterval dans les connaissances JavaScript_Basic

WBOY
Libérer: 2016-05-16 15:11:06
original
1292 Les gens l'ont consulté

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); 

Copier après la connexion

É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(); 
Copier après la connexion

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(); 

Copier après la connexion

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(); 

Copier après la connexion

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(); 

Copier après la connexion

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); 
Copier après la connexion

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); 
Copier après la connexion

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); 

Copier après la connexion

Tout programme écrit de cette manière peut fonctionner normalement

;

Si vous ajoutez des guillemets à auto

//setInterval('auto',4000); 
setTimeout('auto',4000); 

Copier après la connexion

Aucun des deux ne fonctionne correctement.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal