Dire che ho il seguente codice:Javascript ordine di esecuzione con setTimeout()
function testA {
setTimeout('testB()', 1000);
doLong();
}
function testB {
doSomething();
}
function doLong() {
//takes a few seconds to do something
}
eseguo testA()
. Ho letto che Javascript è a thread singolo. Cosa succede dopo 1000 millisecondi quando viene raggiunto il timeout per testB()
?
Alcune possibilità mi viene in mente:
testB()
è in coda da eseguire dopodoLong()
e qualsiasi altra cosa si chiama hanno finito.doLong()
viene immediatamente terminato e viene avviatotestB()
.doLong()
viene dato un po 'più tempo per essere eseguito prima di essere arrestato (automaticamente o dopo aver richiesto all'utente) e viene avviatotestB()
.doLong()
è in pausa,testB()
è avviato. Al termine ditestB()
, riprende lodoLong()
.
Qual è la risposta corretta? È dipendente dall'implementazione o parte dello standard? *
This question è simile ma non è la stessa, per quanto ne so.
Qualsiasi collegamento consigliato per una migliore comprensione dell'esecuzione di Javascript sarebbe apprezzato.
Grazie!
* Sì, lo so che non tutti i browser seguono gli standard :(
Sono arrivato a credere in 'setTimeout (function() {testB(); }, 1000); 'è il modo migliore, sono stato ingannato? –
@ Wizard ombreggiatura: Sì, molto fuorviato. Per quanto ne so, non c'è differenza tra la tua strada e la mia (tranne che la mia è più breve, naturalmente: D). Per illustrare, immagina se abbiamo estratto la tua espressione in una variabile: 'var f = function() {testB(); }; setTimeout (f, 1000); '. Ancora lo stesso significato, ma ora puoi vedere la ridondanza. – Jakob
Grazie, sia per la risposta che per il consiglio sul passaggio di una funzione a setTimeout anziché a String. Sembra che le esercitazioni che ho letto siano un po 'discutibili;) –