質問

次のコードがあると言ってください。

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

function testB {
   doSomething();
}

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

実行します testA(). 。 JavaScriptはシングルスレッドであることを読みました。のタイムアウトの場合、1000ミリ秒後に何が起こるか testB() が達成された?

私が考えることができるいくつかの可能性:

  • testB() 後に実行するためにキューアップされます doLong() そして、それが呼ばれる他のものは何でも終了しました。
  • doLong() すぐに終了します testB() 開始されます。
  • doLong() 停止する前に(自動的にまたはユーザーのプロンプトのいずれか)と実行するのに少し長い時間が与えられ、 testB() 開始されます。
  • doLong() 一時停止します、 testB() 開始されます。後 testB() 終わりました、 doLong() 履歴書。

正解は何ですか?実装に依存しているのですか、それとも標準の一部ですか?*

この質問 私が知る限り、似ていますが、同じではありません。

JavaScriptの実行をよりよく理解するために推奨できるリンクをいただければ幸いです。

ありがとう!

*はい、すべてのブラウザが標準に従っているわけではないことを知っています:(

役に立ちましたか?

解決

最初の推測は正しいものです:testB() is queued up to execute after doLong() and anything else it called have finished.

1秒以上かかる場合 testA 終わる、 testB 単に待たなければなりません。

また、書く必要があります setTimeout(testB, 1000) それよりも setTimeout('testB()', 1000). 。 SettimeOutに文字列を送信することは、使用するようなものです eval, 一般的に悪と見なされます そしてあなたを敵にします;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top