Cet article présente principalement les problèmes auxquels il faut prêter attention lors de l'utilisation de la fonction de fermeture de setTimeout(0) de Javascript. Les amis dans le besoin peuvent s'y référer
setTimeout est souvent utilisé pour retarder l'exécution de. une certaine fonction. L'utilisation est la suivante :
Copier le code Le code est le suivant :
setTimeout(function(){ … }, timeout);
Parfois setTimeout(function. ..,0) est utilisé pour le traitement asynchrone ; par exemple :
Copier le code Le code est le suivant :
function f(){ … // get ready setTimeout(function(){ …. // do something }, 0); return …; }
Avant le processeur de fonction défini par setTimeout, la fonction f renvoie ;
Soyez particulièrement prudent lorsque vous utilisez un traitement asynchrone, en particulier lorsque vous utilisez des fonctionnalités de fermeture
Par exemple :
< ; 🎜>Copier le code Code comme suit :
for(var i = 0 ; i < 10; i++){ setTimeout(function(){ console.log(i); }, 0); }
Le problème est que lorsque la boucle est terminée, la fonction est exécutée et i est devenu 10, ce qui est 10 utilisé dans console.log(i) !
Si votre objectif est d'imprimer 0...9, alors vous pouvez changer la manière et utiliser les paramètres de fonction pour enregistrer 0...9 (en fait, les fermetures sont également utilisées) :
Copiez le code Le code est le suivant :
for(var i = 0 ; i < 10; i++){ setTimeout((function(i){ return function(){ console.log(i); } })(i), 0); }