2017-08-05 11 views
0

console.logを関数と見なした場合、この2つの間の違いは何ですか?適切にすぐに1秒が、最初の呼び出しの後、この二番目のコールを尋ねるためsetTimeoutと関数との違いは何ですか?

setTimeout(console.log('Test'), 1000); 

setTimeout(function(){ console.log('Test'); } , 1000); 

理由。

+1

あなたは 'console.log'呼び出しの結果をsetTimeoutに渡しています – ASDFGerte

答えて

4

setTimeoutの最初のパラメータには、関数が必要です。 console.log('Test')を渡すとconsole.log('Test') FIRSTと評価され、その結果が実際のタイムアウト手順に渡されます。あなたのケースでは、console.log('Test')は、実際に機能を返さないので、console.log('Test')を評価するときに、あなたがsetTimeout関数に何も渡されないので、それは(何もしないし、1秒後に、コンソールにtestを出力します。

秒でそれはあなたが望む結果を与える、1秒後に実行するために、あなたが実際に関数を渡す

あなたはこのような何か見て機能を想像することができます。

function setTimeout(functionToCall, timeToWait) { 
    // Some waiting procedure based on timeToWait 
    functionToCall(); 
} 

免責をこれはWHではありません実際には関数のように見えます。

最初に、JSはconsole.log('Test')を呼び出し、undefinedsetTimeoutに渡します。これによりすぐに印刷されます。 2番目のケースでは、関数全体が最初に評価されることなくsetTimeoutに渡されます。

関連する問題