2015-07-23 20 views
9

Ho avuto un dibattito con il mio collega su questo, poiché abbiamo dovuto affrontare alcuni problemi asincroni/di sincronizzazione. Tuttavia, sollevò un'altra domanda, che non riuscivo a capire una risposta definitiva per.

Assumere un ciclo for-each semplice ($ .each), dove per ogni iterazione chiamo una funzione impostata nell'ambito globale. La funzione viene eseguita in modo sincrono o asincrono? Non assumere Ajax, quindi ciò che fa la funzione è completamente sincrono, anche se semplicemente eseguito. In altre parole, mi chiedo se la chiamata alla funzione stia bloccando l'iterazione o meno.

Grazie!

+1

Non è JavaScript ancora single-threaded? – Marvin

+1

quindi quale lato di questa scommessa ... [cough ... cough] .. * dibattito * eri su ... payee..o payer? – charlietfl

+0

Beneficiario ovviamente. ;) – adi518

risposta

3

Tutto in JavaScript è sincrona. Se non stai usando timeout o callback tutto sarà "sincrono".

Un semplice esempio dovrebbe dimostrarlo.

var data = [1,2,3]; 
var results = []; 
$.each(data, function(d) { results.push(d); }); 

console.log(results); // [1,2,3] 
+0

Quindi voi ragazzi state dicendo che l'iterazione non continuerà fino a quando la funzione chiamata non è terminata, corretta? – adi518

+0

@asde giusto – Strelok

5

È sincrono. È possibile stabilire se si imposta un punto di interruzione dopo il ciclo e uno all'interno del ciclo. Il punto di interruzione nel ciclo verrà colpito prima di quello dopo il ciclo.

Ciò presuppone breakpoint sarà colpita nell'esecuzione, oggetto/array essendo loop sopra ha elementi, ecc

Problemi correlati