Domanda

Dì che ho il seguente codice:

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

function testB {
   doSomething();
}

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

Esecuto testA(). Ho letto che JavaScript è singolo. Cosa succede dopo 1000 millisecondi, quando il timeout per testB() è raggiunto?

Alcune possibilità a cui riesco a pensare:

  • testB() viene messo in coda per eseguire dopo doLong() E qualsiasi altra cosa che si chiamava ha finito.
  • doLong() viene immediatamente terminato e testB() è iniziato.
  • doLong() viene dato un po 'più a lungo da eseguire prima di essere fermato (automaticamente o dopo aver spinto l'utente) e testB() è iniziato.
  • doLong() è messo in pausa, testB() è iniziato. Dopo testB() ha finito, doLong() riprende.

Qual è la risposta corretta? È dipendente dall'implementazione o parte dello standard?*

Questa domanda è simile ma non lo stesso, per quanto posso dire.

Eventuali collegamenti che puoi raccomandare per una migliore comprensione dell'esecuzione di JavaScript sarebbe apprezzato.

Grazie!

*Sì, so che non tutti i browser seguono gli standard :(

È stato utile?

Soluzione

La prima delle tue ipotesi è quella corretta:testB() is queued up to execute after doLong() and anything else it called have finished.

Se ci vuole più di un secondo per testA finire, testB dovrò semplicemente aspettare.

Inoltre, dovresti scrivere setTimeout(testB, 1000) piuttosto che setTimeout('testB()', 1000). L'invio di una stringa a setTimeout è, come l'utilizzo eval, generalmente considerato male e ti renderà nemici;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top