質問: Vue.jsを使って開発をしています。 JSのTimerのsetTimeout()メソッドを利用する際、 ``` execMethod(){ //イベントにて発火 setTimeout(this.printLog,1000) }, printLog(){ console.log('test') } ``` この場合だと1000msあとに関数が実行され、思い通りの結果になります。 しかし、 ``` execMethod(){ //イベントにて発火 // ** 変更箇所 ** setTimeout(this.printLog(),1000) }, printLog(){ console.log('test') } ``` このようにprintLogのあとにカッコをつけると即時実行されてしまいます。 これはJSの言語の仕様なのでしょうか?
回答: > > これはJSの言語の仕様なのでしょうか? > > > 仕様です。 ``` function test() {} test(); // 実行 ``` 【関数 - JavaScript | MDN】 setTimeoutは第一引数に関数を渡します。 ``` function test() { console.log( 0 ) } setTimeout( test, 1000 ); function test2() { console.log( 1 ) return function() { console.log( 2 ) } } setTimeout( test2(), 1000 ); ``` 【WindowOrWorkerGlobalScope.setTimeout() - Web API | MDN】