Question

Dites que j'ai le code suivant:

function testA {
   setTimeout('testB()', 1000);
   doLong();
}

function testB {
   doSomething();
}

function doLong() {
   //takes a few seconds to do something
}

J'exécute testA(). J'ai lu que Javascript est mono-thread. Qu'est-ce qui se passe après 1000 millisecondes, lorsque le délai d'attente pour testB() est atteint?

Quelques possibilités que je peux penser:

  • testB() est mis en attente jusqu'à exécuter après doLong() et tout ce qu'il a appelé ont fini.
  • doLong() est immédiatement terminée et testB() est démarré.
  • doLong() est donné un peu plus de temps à exécuter avant d'être arrêté (soit automatiquement, soit demander à l'utilisateur) et testB() est démarré.
  • doLong() est en pause, testB() démarre. Après testB() terminée, doLong() reprend.

Quelle est la bonne réponse? Est-il dépendant de la mise en œuvre ou d'une partie de la norme? *

Cette question est similaire, mais pas la même chose, pour autant que je peux dire .

Tous les liens que vous pouvez recommander pour une meilleure compréhension exécution Javascript serait apprécié.

Merci!

* Oui, je sais que tous les navigateurs sont conformes aux normes: (

Était-ce utile?

La solution

La première de vos suppositions est correcte: testB() is queued up to execute after doLong() and anything else it called have finished.

Si cela prend plus d'une seconde pour testA à la fin, testB simplement attendre.

En outre, vous devriez écrire setTimeout(testB, 1000) plutôt que setTimeout('testB()', 1000). Envoi d'une chaîne à setTimeout est, comme l'utilisation de eval, mal généralement considéré et vous faire des ennemis;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top