2017-06-28 5 views
1

私はイベントループを説明する素晴らしい記事thisを読んでいます。"定義されていません"イベントループで出力されています、なぜですか?

その記事の中に、メッセージがキューに入れられ、どのように処理されるかを示し、このコードがあります:

function f() { 
 
    console.log("foo"); 
 
    setTimeout(g, 0); 
 
    console.log("baz"); 
 
    h(); 
 
} 
 

 
function g() { 
 
    console.log("bar"); 
 
} 
 

 
function h() { 
 
    console.log("blix"); 
 
} 
 

 
f();

これは、コンソールで次の(クローム)を印刷します: FOO、バズを、 blix、未定義、バー。

私はここで何が起こっているのか理解していると思いますが、これはどこですか?は未定義ですから来ていますか?

+1

未定義は関数呼び出しの結果から来ており、undefinedを返しており、chromeはそれを単に印刷しています。 –

+2

[問題のタイトルにタグを入れないでください](https://stackoverflow.com/help/tagging) – Liam

答えて

6

undefinedは、最後に実行された式の値を自動的に出力する対話型コンソールでこれを実行している場合に表示されるf()の戻り値です。

1

undefinedの値は、f()の結果です。 javascriptの各ステートメントは式として値を持ちます。明示的なreturn文を持たない関数は基本的にundefinedを返します。

Chromeコンソールでは、最後に実行されたステートメントの値が常に出力されます。この場合、結果はf()です。

バーが印刷されます(つまり、f()が返された後)。それはタイムアウトによって引き起こされます。

関連する問題