Veuillez regarder ces quatre fonctions setTimeout et leurs parties d'exécution
P粉304704653
P粉304704653 2023-09-17 18:04:25
0
1
592

//1
setTimeout(() => {
  console.log('hi');
}, 5000)

//2
setTimeout(() => {
  console.log('hello');
}, 3000)

//3
setTimeout(() => {
  console.log('bye');
}, 0)

//4
setTimeout(() => {
  console.time('the code took:');
  let i = 10000
  while (i--) {
    console.log(i);
  }
  console.timeEnd('the code took:')
}, 7000)

Ici, j'ai écrit quatre fonctions setTimeout D'après ma compréhension, elles commenceront à s'exécuter en même temps dans la file d'attente de rappel, n'est-ce pas ? Si j'ai raison, ma question est de savoir si la quatrième fonction setTimeout() a terminé la moitié ou plus de la moitié de son exécution dans la file d'attente de rappel ou démarre-t-elle depuis le début après 7 secondes après avoir été insérée dans l'implémentation de la pile d'appels ? Alors que se passe-t-il dans les coulisses ?

P粉304704653
P粉304704653

répondre à tous(1)
P粉709307865

Ces fonctions ne s'exécuteront pas en parallèle ou simultanément dans la file d'attente de rappel. Ils sont programmés individuellement et de manière asynchrone. L'ordre d'exécution dépend de la latence spécifiée de chaque fonction. Pour chaque fonction setTimeout, un rappel est programmé pour s'exécuter après le délai spécifié.

La séquence d'exécution est la suivante :

第三个setTimeout(0毫秒延迟)
第二个setTimeout(3000毫秒延迟)
第一个setTimeout(5000毫秒延迟)
第四个setTimeout(7000毫秒延迟)

Cependant, la quatrième fonction setTimeout ne s'exécute pas nécessairement avec d'autres fonctions setTimeout, et son exécution n'est pas non plus garantie seule. L'ordre d'exécution est déterminé par la file d'attente de rappel, la boucle d'événements récupère les tâches de la file d'attente de rappel et les exécute dans la pile d'appels uniquement lorsque la pile d'appels est vide. Par conséquent, la quatrième fonction setTimeout ne commencera à s'exécuter que lorsqu'il n'y aura aucune autre tâche dans la pile d'appels. Après avoir exécuté le code donné, le résultat devrait apparaître dans l'ordre suivant :

Voici la séquence de sortie :

1. bye
2. hello
3. hi
4. 从10000打印到0(降序)
5. 代码执行时间为...毫秒
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal