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

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

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

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

Q&A

解決済

4回答

892閲覧

whileを使った繰り返し 決まった回数、コンソール上に現在時刻を表示させたい

maleon

総合スコア13

JavaScript

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

0グッド

0クリップ

投稿2020/09/30 12:34

前提・実現したいこと

・1秒ごとに、コンソール上に現在時刻を表示する
・これを5回実行させたい

発生している問題・エラーメッセージ

下のコードだと、1秒ごとに5回、現在時刻がコンソール上に表示されてしまいます。

該当のソースコード

javascript

1let i = 0; 2function showTime(){ 3 console.log(new Date()); 4}; 5 6while(i < 4){ 7 setInterval(showTime, 1000); 8 i++; 9}; 10

試したこと

ダメもとで 'i++' の場所を、setIntervalの前後に変えてみたが、意味なし。
正直、どこが違うのかよく分かりません。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答4

0

オリジナルをいかすならこう

javascript

1let i = 0; 2function showTime(){ 3 console.log(new Date()); 4}; 5 6while(i <= 4){ 7 setTimeout(showTime, 1000*i); 8 i++; 9};

投稿2020/10/01 00:59

yambejp

総合スコア116720

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

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

maleon

2020/10/04 05:59

ありがとうございます。 元の形を活かすように助言いただけて嬉しいです
guest

0

ベストアンサー

whileの実行自体が、速攻なので、
五つのsetIntervalがほぼ同時にスタートするからです。

5回だけ実行したいんですよね?
であれば、whileを使うと、逆にややこしい処理をしなくてはならなくなるので、下記でどうでしょうか?

javascript

1let i = 0; 2let timer = null; 3function showTime(){ 4 console.log(new Date()); 5 if (i < 4) { 6 i++; 7 } else { 8 if (timer) { 9 // 五回実行されたなら、インターバルを解除する 10 clearInterval(timer); 11 } 12 } 13} 14 15timer = setInterval(showTime, 1000);

あと、蛇足ですが、
while(){}と、function funcName(){}の末尾に、;は要りません。

投稿2020/09/30 17:54

編集2020/09/30 17:56
miyabi_takatsuk

総合スコア9555

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

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

maleon

2020/10/04 06:03

miyabiさんの回答でピンときました! 私が書いたオリジナルは、showTime A, B, ...E というように、一瞬のうちに5回showTimeを実行、それを一秒ごとに繰り返させるコードになっていますね。 確かに、whileを使う場面では無かったと思います。 補足も含め、ありがとうございます!
guest

0

while文を必ず使用する必要がないのであれば、以下のような方法ではどうでしょうか?

JavaScript

1 2function countup(count) { 3 if(count === undefined) { 4 count = 0; 5 } 6 if(count > 5) { 7 return; 8 } else { 9 console.log(count++); 10 setTimeout(countup, 1000, count); 11 } 12} 13countup();

関数countup()は関数内でsetTimeoutを呼び出し、引数に自分自身を渡す再起関数です。
変数countが0~4の間はcountの数字を足し続け、5になるとcount変数を0に初期化し、何もせずに処理を中断します。

投稿2020/09/30 13:43

編集2020/09/30 13:56
showggg

総合スコア23

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

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

maleon

2020/10/04 06:05

ありがとうございます! 再起関数という方法もあるんですね。 勉強になります!
guest

0

こちらの記事はいかがでしょうか?
https://techacademy.jp/magazine/5537

投稿2020/09/30 12:48

Gak

総合スコア83

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

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

maleon

2020/10/04 06:05

ありがとうございます! よく確認させてもらいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問