重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Javascriptのreturnについての質問です。

最近Javascriptを勉強しだしたのですが、return文がなかなか理解できません。
いま読んでいる参考書にこういったのが載っていたのですが、ここに書かれているreturnはどのような動きをしているのでしょうか?


1, function showNow(diff){
2, var msg;
3,var now = new Date();
4,now.setTime(now.getTime() + diff * 3600000);
5,msg = now.getHours() +"時";
6,msg += now.getMinutes() +"分";
7,msg += now.getSeconds() +"秒";
8,return msg;
9, }
10,
11, document.write("東京の時刻:" + showNow(0) + "<br />");
12, document.write("ニューヨークの時刻:" + showNow(-14) + "<br />");
13, document.write("ロンドンの時刻:" + showNow(-9));



8,の「return msg」が1,の「showNow」に戻って、それから11,12,13,の「showNow」に戻る、という動きをしているんでしょうか?

そして引数の「diff」はここではどういった役割をしているのでしょうか?
それと「diff * 3600000」はどういった意味なんでしょうか?
なぜ「var msg;」はなにも代入していないのでしょうか?



もうこんがらがってしまい、たくさん質問してしまってすいません!
どなたか上の文がどのように動いているのか分かりやすく説明していただけると大変嬉しいです!
参考書も色々読んではいるのですが、いまいち理解できなくて。。。

すみませんがお時間ある方よろしくお願いします!!

A 回答 (3件)

私も勉強中なので、話半分に聞いてください。



returnの動きがわからないとのことですが、まず先に、 showNow(){...} の部分では関数を定義しているだけで、実行されてはいません。
実際に実行するためには showNow(diff); と書く必要があります。(diffの部分は値です)
なので、11、12、13の部分でそれぞれshowNow関数が呼び出され、そこで初めて実行されているということになります。

順を追ってみてみると、11のdocument.write内でshowNowが呼び出され、その引数は0になっています。
ここで diff=0 というようにdiffに0が代入されます。
つまり、 showNow(0); という風に関数を呼び出した場合、diffは0として、 showNow(1); ならdiffは1として扱います。

そして var msg; ですが、これはローカル変数を定義しています。
javascriptでは変数にローカル変数、グローバル変数というものがあります。
ここは説明を省きますが、javascriptはローカル変数を使う方が実行速度が速いです。そしてローカル変数を使うためには必ず var ...; のような形で使う前に定義しておく必要があります。
showNow関数内ではdiffの計算のためにmsgとnowというローカル変数が使われているので、それを一番最初に定義してあります。

そしてshowNow内の処理を順に行っていくと、最後に return msg; があります。
ここでは呼び出したshowNow(0)にmsgの値を返しています。なので、

document.write("東京の時刻:" + showNow(0) + "<br />");



document.write("東京の時刻:" + msg + "<br />");

という感じになります。
    • good
    • 0
この回答へのお礼

大変分かりやすい説明ありがとうございます!!
metametamu様の説明を聞きながら改めて参考書を読んだら理解できました!!

これでやっとスッキリして前へ進めます!
ありがとうございました!!!

お礼日時:2010/08/18 20:25

関数というものが理解できていないのではないでしょうか?


その参考書にも説明が載っていると思いますのでもう一度確認されてみてはいかかでしょうか。

showNowの引数のdiffは現地時刻との時差を時間単位で指定するものですね。
-14であれば14時間前の時刻、-9であれば9時間前というように。
DateクラスのsetTime()の引数はミリ秒で指定しなければいけないので、diff * 36000000 として時間からミリ秒に変換しています。
3600000 = 60(分)* 60(秒)* 1000(ミリ秒) ということです。

var msg; は#1さんもおっしゃているように変数の定義をしているだけです。
2行目に書かずに5行目のmsgの前にvarと書いても同じことです。
    • good
    • 0
この回答へのお礼

すいません!おっしゃる通りたぶんまだ関数というのが理解できていないのだと思います。
しかし皆さんのおかげでだいぶ理解できるようになってきました!

お礼日時:2010/08/18 20:22

順番に行きます。


> 引数の「diff」はここではどういった役割をしているのでしょうか?
この関数「showNow」を呼び出したときの引数を受け取る変数です。
実際には、11,12,13の括弧の中のものが入ります。

> 「diff * 3600000」はどういった意味なんでしょうか?
関数を呼び出す側では、時刻で呼び出しているので、マイクロ秒に換算しているようです。

> なぜ「var msg;」はなにも代入していないのでしょうか?
変数を定義しているだけです。

> 8,の「return msg」が1~
実際の実行順序は、
(関数定義は最初実行されません)
11→1→2~7→8→12→1→2~7→8→13→1→2~7→8→終了
となります。
    • good
    • 0
この回答へのお礼

なるほど、diffの役割がよく分かりました!
ありがとうございます!

お礼日時:2010/08/18 20:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!