2017-02-21 7 views
0

次のコードは、出力内の '未定義' 与えるのはなぜ

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

出力:

1 
4 
undefined 
3 
2 

なぜ出力で未定義ありますか?

+0

あなたはGoogle Chromeのコンソールでこれをテストしているだろう例えば

のsetTimeout

から値を記録します、1,4ログ? –

+0

どこか別の場所にログオンしていない限り、「未定義」はありません。 –

+0

私はクロムコンソールでテストしていました。 –

答えて

2

これは、関数の戻り値がundefinedであるためです。だから、最初return value of functionそれは

(function(){ 
    console.log(1); 
    setTimeout (function(){console.log(2);},1000); 
    setTimeout (function(){console.log(3);},0); 
    console.log(4); 
    return 'xyz' 

})(); 

出力が

1,4,'xyz',3,2 
4

未定義は、関数の戻り値です。これは、ブラウザのコンソールでこれを行うと、関数の結果を自動的に出力するため、未定義のまま出力されます。

+0

私は一番上のものを意味します。 – Bigdragon

+0

@ LKTN.25 1つがあります!そのような 'somevar =/*質問に掲載されたコード* /;'なので、他の人を数えるIIFE自体がIIFE自体の中に包まれているだけです! –

5

ブラウザ自体のコンソールでそれをやっている場合は、それが未定義印刷さにconsole.logたび、その後、このスレッドを参照してください。

Chrome/Firefox console.log always appends a line saying undefined

そして、それが起こる理由を説明する無数の他のスレッドがあります。

これはコンソールではありませんが、あなたのJSファイル自体に続い未定義の関数の戻り値であることに

1

をやっている、あなたのコード内のどこかに何か他のものがあります場合は、コードの下に試すことができます。

(function(){ 
     console.log(1); 
     setTimeout (function(){console.log(2);},1000); 
     setTimeout (function(){console.log(3);},0); 
     console.log(4); 
     return 5; 
    })(); 
関連する問題