2017-12-01 19 views
0

次のコードが発生する順序を確認しようとしています。JavaScriptスタック、キュー、イベントループ?

function square(n) { 
    return n * n; 
} 

setTimeout(function(){ 
    console.log("Hello"); 
}, 0); 

console.log(square(2)); 
  1. のsetTimeout()は、スタックからポップされ、その後、匿名の()は、キューになります。

  2. setTimeout()はスタック上にあり、anonymous()はキューに行き、setTimeout()はスタックからポップされます。

正しい順序はどれですか?このlinkで試してみましたが、setTimeout()が最初にポップされてから匿名()がキューに移動することがわかりましたが、これを確認するだけです。

+0

なぜ** 0 **でsetTimeoutを使用していますか? SetTimeoutはスタックからポップされず、コールバックを設定してすぐに実行されます。 – user2182349

+0

スタックとキューでどのように動作するかを観察するために、0に設定しました。 anonymous()がキューにある間、console.log(square(2))が発生し、スタックが完全に空の場合、イベントループがアクティブになり、anonymous()がキューからスタックに送られます。 –

答えて

2

最初の回答は正しいです。 setTimeout関数がポップされると、setTimeoutの最初の引数として書き込まれた名前のない内部関数anonymous()がキューに送られ、他のすべてのコードが実行されるまでそこに残ります。

+0

ただし、リンクでツールを使用すると、2番目が発生することがわかります。 –

関連する問題