javascript
1<script> 2 3 //処理1 4 setTimeout(console.log('hoge'),4000); 5 6 //処理2 7 var hyouji = function(){ 8 console.log('hoge'); 9 } 10 setTimeout(hyouji,4000); 11 12</script>
javascriptの初歩的な質問なのですが、
上記処理1と処理2でコンソールにhogeが出るタイミングが違う理由がわかりません。
プログラムの結果
処理1は画面を開いたときにhogeがでる。
処理2は指定時間後にhogeがでる。
setTimeoutは指定時間後に処理をしますよね。
でしたら、処理1は処理2と同様に指定時間後にhogeが出ると思うのですが、違いますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
setTimeoutは渡された関数を実行するので、「処理1」はconsole.log('hoge')
の実行結果が関数を返さないので指定秒数後に何も実行されません。
括弧が付いたらその場で実行しますよ。
js
1setTimeout(hyouji ,4000); // 4000後 2setTimeout(hyouji(),4000); // その場で実行
投稿2020/07/31 09:30
編集2020/07/31 13:19総合スコア69606
0
ベストアンサー
式を解釈することをプログラミング用語で「評価」というのですが、setTimeoutの引数は即座に評価されます。
js
1setTimeout(console.log('hoge'),4000);
↑を評価すると、console.log()
が即座に実行されコンソールにhogeが表示され、その戻り値は常にundefined
なので↓になります。
js
1setTimeout(undefined,4000);
一方で、
js
1setTimeout(hyouji,4000);
↑を評価すると、変数hyoujiの中身は関数なので↓となりますが、hyouji()などのように関数を実行しているわけではないのでコンソールには表示されません。
js
1setTimeout(function(){ 2 console.log('hoge'); 3 },4000);
↓ならば、即座にコンソールにhogeが表示されます。
js
1setTimeout(hyouji(),4000);
投稿2020/07/31 09:33
総合スコア36960
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/02 09:14 編集
2020/08/10 02:16
2020/08/10 04:38
2020/08/10 16:20
0
ご質問の処理1は以下のように考えてください。
javascript
1//setTimeout(console.log('hoge'),4000); 2// 以下の処理と同じ 3console.log('hoge'); 4setTimeout(undefined,4000); // setTimeout の返却値である timeoutId がカウントアップされる
- MDN console.log() 返却値なし(
undefined
) - MDN setTimeout() に示される3つめの例文(code が何もない)になります。
投稿2020/08/10 10:01
総合スコア5434
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/31 09:48
2020/07/31 13:19