recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Un problème avec setTimeout

test de fonction() {

  var a = 1;
  setTimeout(function() {
    alert(a);
    a = 5;
  }, 1000);
  a = 19;
setTimeout(function() {
   alert(a);
    a = 4;
  }, 3000);
}
test();
alert(0);

想问一下,为什么最后会弹出5?
某草草某草草2810 Il y a quelques jours576

répondre à tous(3)je répondrai

  • 仅有的幸福

    仅有的幸福2017-06-14 10:55:57

    Tout d'abord, il est recommandé au sujet de lire un article sur JavaScript
    Explication détaillée du mécanisme de fonctionnement de JavaScript Event Loop

    Cet article explique en détail le principe du sondage d'événements JavaScript

    Parlons de la question du sujet :

    1. Le thread principal s'exécutera en premier. Lorsque test() est exécuté, deux setTimeouts seront placés dans la file d'attente des tâches en même temps, puis alert(0) sera exécuté, donc 0 sera affiché en premier. time, la valeur de a est 19, car setTimeout Il n'a pas encore été exécuté, il n'y a pas d'autre opportunité d'affectation pour a;

    2. Une fois le thread principal exécuté, il interroge ensuite la file d'attente des tâches pour exécuter la tâche planifiée. Étant donné que le premier temps setTimeout est plus court que le second, le premier rappel setTimeout est exécuté en premier. sera émis après environ 1 s. Un pas de 19, puis a se voit attribuer une valeur de 5 ;

    3. Exécutez ensuite le deuxième setTimeout Étant donné que les deux setTimeouts sont mis dans la file d'attente en même temps, le rappel du deuxième setTimeout sera exécuté environ 2 secondes plus tard, le 5 obtenu à l'étape précédente sera affiché, puis une valeur attribuée sera 4. La raison pour laquelle il s'agit d'environ 2 secondes est que le minuteur Javascript n'est pas précis

    répondre
    0
  • 三叔

    三叔2017-06-14 10:55:57

    Votre propre débogage vous aidera à mieux comprendre le mécanisme

    répondre
    0
  • 漂亮男人

    漂亮男人2017-06-14 10:55:57

    Après l'exécution du premier timer, le a global est devenu 5
    Le changement de a dans la fonction test : 1-19-5-la dernière alerte(a)-4

    répondre
    0
  • Annulerrépondre