質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1603閲覧

JavaScriptのカウントダウンタイマーについて

kaji120

総合スコア39

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/06/14 13:07

JavaScriptで、カウントダウンタイマーを作成しています。
わからないところが二つありましたので質問させて頂きます。

1、最後のrefreshはrecalcの{}の外でfunctionを使って記述していますが何故でしょうか。

2、何故最後の行でrecalc()を記述しなければいけないのでしょうか。

ご回答お待ちしております。宜しくお願い致します。

JavaScript

1function recalc() { 2 3 let counter = countdown(goal); 4 5 const time = `${counter[0]}${counter[1]}時間${counter[2]}${counter[3]}`; 6 7 document.getElementById('birthday').textContent = time; 8 9 refresh(); 10 } 11 12 function refresh() { 13 setTimeout(recalc,1000); 14 } 15 16 recalc(); 17

コード全体

JavaScript

1<script> 2 "use strict" 3 4 function countdown(due){ 5 const now = new Date(); 6 7 const reset = due.getTime() - now.getTime(); 8 9 const sec = Math.floor(reset/1000)%60; 10 const min = Math.floor(reset/1000/60)%60; 11 const hour = Math.floor(reset/1000/60/60) % 24; 12 const day = Math.floor(reset / 1000 / 60/ 60 / 24); 13 14 const count = [day,hour,min,sec]; 15 16 return count; 17 } 18 19 let goal = new Date(2020,12,6); 20 21 function recalc() { 22 23 let counter = countdown(goal); 24 25 const time = `${counter[0]}${counter[1]}時間${counter[2]}${counter[3]}`; 26 27 document.getElementById('birthday').textContent = time; 28 29 refresh(); 30 } 31 32 function refresh() { 33 setTimeout(recalc,1000); 34 } 35 36 recalc(); 37 </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sousuke

2020/06/14 13:19

1、最後のrefreshはrecalcの{}の外でfunctionを使って記述していますが何故でしょうか。 最後のrefreshとは何行目のことですか?またrecalcの{}の内でfunctionを使わない記述というものを 質問者さんがお持ちならそれその考え、コードを書いたほうがいいと思います。
kaji120

2020/06/14 13:26

最後のrefreshとは、setTimeoutのところです。
kei344

2020/06/14 13:31

コードの出典を質問文に追記してください。
guest

回答1

0

ベストアンサー

1、最後のrefreshはrecalcの{}の外でfunctionを使って記述していますが何故でしょうか。

そんなに深い意味はないのでは。recalc内でsetTimeout(recalc,1000)してもちゃんと動きます。再帰的な呼び出しコード記述を避けたかったのか、refresh()を他の箇所で使いたい布石なのか。

2、何故最後の行でrecalc()を記述しなければいけないのでしょうか。

最後のrecalc()を削除して実行すればすぐわかりますが、カウントダウン自体が実行されません。
関数は定義しただけでは実行されません。どこかでコールしないと。

投稿2020/06/15 02:14

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaji120

2020/06/16 01:41

ご丁寧に有難うございます! 非常に分かり易かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問