Maison > interface Web > js tutoriel > Une brève discussion sur l'utilisation de setInterval et setTimeout dans les connaissances JavaScript_Basic

Une brève discussion sur l'utilisation de setInterval et setTimeout dans les connaissances JavaScript_Basic

WBOY
Libérer: 2016-05-16 15:47:37
original
1396 Les gens l'ont consulté

En ce qui concerne setInterval, nous devons mentionner setTimeout. Les deux sont utilisés pour exécuter régulièrement une certaine fonction. La différence est que setTimeout n'est exécuté qu'une seule fois, tandis que setInterval peut être exécuté en continu :

function do_sth() { console.log('Hello...'); }

Copier après la connexion
setTimeout(do_sth, 2500);  // 2.5 秒后,执行 do_sth 函数(只执行一次)
setInterval(do_sth, 3500); // 3.5 秒后,执行 do_sth 函数(每隔 3.5 秒执行一次,一直执行下去)

Copier après la connexion

En apparence, les deux ont leurs propres utilités et il n'y a pas de problème. Cependant, si la fonction exécutée par setInterval est une action qui prend du temps, setInterval appellera toujours cette fonction selon le plan d'origine, quel que soit le blocage précédent. De cette manière, au fil du temps, le nombre de fonctions en attente d'exécution. dans la file d'attente augmentera. La solution à ce problème consiste toujours à appeler de manière récursive setTimeout, tel que :

function do_sth() {
 console.log('Hello...');  // 即使这里执行比较耗时的动作也没问题,
                  // 等这里执行完了才会再去调用 setTimeout

 setTimeout(do_sth, 2500); // 安排后续执行
}

do_sth();             // 初次执行

Copier après la connexion

Cette méthode d'appel récursive peut non seulement atteindre l'objectif d'exécuter une certaine fonction en boucle, mais également empêcher l'accumulation de tâches ultérieures.

Si vous pensez que cette méthode est un peu verbeuse, vous pouvez l'écrire de manière plus concise :

(function() {
 console.log('Hello...');  // do something here
 setTimeout(arguments.callee, 2500);
})();

Copier après la connexion

C'est tout, mais si le coût de la tâche d'exécution planifiée est faible, setInterval ne pose généralement aucun problème, mais si le coût de la tâche est relativement élevé, assurez-vous d'utiliser setTimeout.

É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