Calendrier d'exécution de la fonction JS

La temporisation d'exécution différente des fonctions JS affectera les résultats de sortie de l'opération de fonction. Vous ne pouvez pas juger ce que la fonction génère par le code lui-même, mais en fonction de la temporisation d'exécution spécifique de la fonction.

1 Voir le code ci-dessous

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

Insérez la description de l'image ici

La sortie d'exécution de code ci-dessus 6 6s, pourquoi? Étant donné que setTimeout est une tâche asynchrone, l'opération effectuée ici sera lancée dans une autre file d'attente de tâches par le navigateur. Le navigateur continuera à s'exécuter à ce moment et le code suivant sera exécuté avant l'exécution de la fonction setTimeout. Opération, cette fois parce que la boucle for a ajouté i à 6, donc toute la sortie est 6.

2 Comment faire imprimer le code ci-dessus 0, 1, 2, 3, 4, 5?

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

Insérez la description de l'image ici
Définissez i dans le corps de la boucle for, et la sortie est le résultat que nous voulons. Pourquoi?

Étant donné que la portée de la variable let ne peut être que dans la fonction actuelle, chaque fois que la boucle for génère un nouveau i, la sortie i dans setTimeout est le nouveau i, et ce i ne changera pas, donc la sortie est Normal.

3 Outre l'utilisation de let, il existe d'autres façons d'imprimer 0, 1, 2, 3, 4, 5

3.1 En utilisant les fermetures de fonctions, nous définissons une fonction anonyme et passons le courant i comme valeur dans la sortie, vous pouvez imprimer le résultat correct
let i
for(i = 0; i<6; i++){
	!function(value) {
		  setTimeout(()=>{
		    console.log(value)
		  },0)
	}(i)
}

Insérez la description de l'image ici

3.2 Utilisez le troisième paramètre de setTimeout, passez i dedans et imprimez-le comme valeur
let i
for(i = 0; i<6; i++){

		  setTimeout((value)=>{
		    console.log(value)
		  },0,i)

}

Insérez la description de l'image ici

3.3 Utilisation du mot clé const
let i
for(i = 0; i<6; i++){
	const x = i
	setTimeout(()=>{
	   console.log(x)
	 })
}

Insérez la description de l'image ici

Publié 38 articles originaux · loué 17 · vues 9007

Je suppose que tu aimes

Origine blog.csdn.net/cainiao1412/article/details/101527941
conseillé
Classement