Maison > Questions et réponses > le corps du texte
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?
仅有的幸福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
漂亮男人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