JavaScriptは処理速度から終了まで、ひと筋の流れで行なうシングルスレット(同期処理)だ。

簡単な処理をみてみる。

console.log(1);
console.log(2);
console.log(3);

出力は、
>1
>2
>3

である。

次に、

console.log(1);
setTimeout(function(){
      console.log(2),1000
 });
console.log(3);

としてみる。

出力は
>1
>3
>2

となる。

このばあいも、コードの上から順番に処理されるわけだけれど、

2行目に、あえてsetTimeout関数を使い、2の出力を1000ミリ秒、遅らせている。つまり同期処理でも非同期なこともできたりするわけ。
2行目のsetTimeout関数を処理しているあいだ、次の3行目への処理に移っている。手順は順ありながら、処理結果が逆順(非同期)になったりするわけ。

ちなみに、function(){console(){console.log(2),1000})は、setTimeoutのコールバック関数となっているね~。