2016-10-16 4 views
0

私はJavaScriptで非同期呼び出しについて学習していました。それは2つの方法で混乱している!JavaScriptについて - 非同期呼び出し、これらの2つのプログラムの実行の違い?

今日私はこれらの2つのプログラムを書いて、結果は異なります。誰かが深い違いを説明することができます。

setTimeout(function(){console.log(5)},5); 
console.log(55); 
setTimeout(function(){console.log(4)},4); 
console.log(44); 
setTimeout(function(){console.log(2)},2); 
console.log(22); 
setTimeout(function(){console.log(3)},3); 
console.log(33); 

と、この -

setTimeout(function(){console.log(5)},5000); 
console.log(55); 
setTimeout(function(){console.log(4)},4000); 
console.log(44); 
setTimeout(function(){console.log(2)},2000); 
console.log(22); 
setTimeout(function(){console.log(3)},3000); 
console.log(33); 

唯一の違いは、彼らのタイムアウト時間です。私はまた百人 で試してみることもできます。

私の推測するように、その出力はCPUの速度やその他の多くの要因に左右されるかもしれません。

私は...最初のものからこれを得たが

55 
44 
22 
33 
2 
3 
4 
5 

(予想通り)... THANKSをhere

55 
44 
22 
33 
5 
2 
3 
4 

2つ目からを実行しました!

EDIT:後、最初のコード部分のため、私はまた、Ubuntuのに試み - nodejs - v5.12.0

私はこの時に理解することは容易ではない5 4 2 3(新しい順列)

+2

https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout#Reasons_for_delays_longer_than_specified – melpomene

+0

ええ、5 2 3 4は本当に奇妙です。 4 2 3 5最低限のタイムアウトは4msなので、後者の3つは同じタイムアウトになり、登録された順序で実行されるはずですが、明らかにそれ以上のものがあります。 – Bergi

+0

@Bergiも同じ出力を得ましたか? –

答えて

-1

を得から始まるので、JavaScriptが上記の場合が完了したら実行する必要がありますが、はこれと似ていないと思います。最後のconsole.log機能がその中にあるsetTimeoutが最初に印刷された2番目の例を見てください。何か間違っている?いいえ、JavaScriptの性質です。

これを理解するには、それが実行されていないすべての機能が即座にのバックグラウンドで実行されると考えてください。 1つの鉄道に渋滞があるとしたら、他の鉄道を使わないでください。それは馬鹿で、他のものを使って交通量を減らしたり、他のものが他のものよりも低くなったりしても、トラフィックを減らすために貢献しています。 Javascriptは非同期ですが、同期性を設定することはできますが、個人的には推奨しません。

+0

OPは非同期の仕組みを理解していて、コードに現れる順番で実行されないことを知っています。 2番目の例について。彼は最初の例では実行の順序について混乱しています。 – Bergi

+0

私は、なぜ結果がそのコードが間違っているのか、そのCPUが出力の責任ではなく、JavaScriptの性質であるのかを説明したと思います。 – PinaGamer

+0

はい! @Bergiが正しいです。 –

関連する問題