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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

439閲覧

JavaScriptの基本的な処理のされ方や順番について

cqwbxx

総合スコア1

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2023/01/23 07:31

前提

プログラミングの基本的な質問です。
JavaScriptの勉強をしているのですが、2つのコードの違いというか、処理のされ方の違いについて知りたいのですが、

該当のソースコード

JavaScript

1例1 2function hello() { 3 console.log("Hello"); 4} 5 6setTimeout(hello, 1000); 7 8// この場合だとHelloが少し時間をおいて1回出力される 9 10しかし、setTimeout(time, 1000); が中に入った場合 11 12例2 13function hello() { 14 console.log("Hello"); 15 setTimeout(hello, 1000); 16} 17 18hello(); 19 20// これだと Hello が永遠に出力される(ループ) 21

知りたいこと(プログラミングにおいての処理の順番やされ方を知りたい)

プログラミング初心者です。JavaScriptについての質問なのですが、

上に書いたコードと下に書いたコードの違いが分かりません。

上に書いたコードがsetTimeoutで1000ミリ秒後にHelloを出すのは分かるのですが、

下のコードだと永遠にループしてしまいます。

hello();でhello関数の中身を1000ミリ秒後に中で処理をしてそれで終わりという事にはならないのでしょうか?

下のコードの場合は上のパターンとは違って、一度関数の中の処理をした後に外に出て、再度自動的にhello();の処理をするので、また関数内に戻って出て処理をして外に出て外の処理をしての繰り返しになってしまうという意味合いなのでしょうか?

プログラミング初心者で質問の内容も分かり辛いかもしれませんが、回答いただけるとありがたいです。

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

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

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

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

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

guest

回答2

0

自分も駆け出しですので間違えていたらご容赦を

先に簡潔に答えますと簡単な訂正としてhello();は一度しか処理されてません。
呼び出されたhello()メソッドの中で処理が無限に生成されループが起きています。

hello();がhello()メソッドを1度だけ呼び出した後、hello()メソッドの中に
setTimeout(hello, 1000);といったhello()メソッドをまた呼び出す処理が入っています。
そうすると、hello()の中のsetTimeoutがhello()を呼び出して今呼び出したhello()の中のsetTimeoutからまた…
hello(){}→setTimeout(hello, 1000)→hello(){}→setTimeout(hello, 1000)→...
といったイメージでループしているかと

上の例1だとsetTimeoutがhello()を呼んでコンソールに出力して終わりなのでループはおきません。

投稿2023/01/23 08:19

KE_TU

総合スコア9

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

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

cqwbxx

2023/01/23 09:02

回答ありがとうございます。今回テラテイルを使うのが初めてなのですが非常に助かりました。プログラミングは難しく未だ理解出来ていない事ばかりです。これからもお互い頑張りましょう。
guest

0

ベストアンサー

JavaScript

1setTimeout(hello, 1000);

たしかこれは、1000ミリ秒ごとに この場合 hello という関数を実行するわけですが。

例2の場合

JavaScript

1function hello() {      ←ここで関数 hello を定義している。(タイミング※1) 2 console.log("Hello"); 3 setTimeout(hello, 1000); ←ここで関数 hello を再度実行している(タイミング※24} 5 6hello(); ←関数helloを実行させている。

JavaScript は 上から処理が落ちていくので、タイミング※2の時点で、helloをもう一度実行させている(タイミング※1を呼び出している)ので、ものすごい勢いで永遠に "Hello" が出力され続けるということかと。

投稿2023/01/23 07:49

編集2023/01/23 07:50
penguin520

総合スコア345

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

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

cqwbxx

2023/01/23 09:03

この場合は関数helloが2回実行されているという事になるのですね。納得がいきました。 今回テラテイルを使うのが初めてなのですが非常に助かりました。親切にご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問