
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;」はなにも代入していないのでしょうか?
もうこんがらがってしまい、たくさん質問してしまってすいません!
どなたか上の文がどのように動いているのか分かりやすく説明していただけると大変嬉しいです!
参考書も色々読んではいるのですが、いまいち理解できなくて。。。
すみませんがお時間ある方よろしくお願いします!!
No.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 />");
という感じになります。
大変分かりやすい説明ありがとうございます!!
metametamu様の説明を聞きながら改めて参考書を読んだら理解できました!!
これでやっとスッキリして前へ進めます!
ありがとうございました!!!
No.2
- 回答日時:
関数というものが理解できていないのではないでしょうか?
その参考書にも説明が載っていると思いますのでもう一度確認されてみてはいかかでしょうか。
showNowの引数のdiffは現地時刻との時差を時間単位で指定するものですね。
-14であれば14時間前の時刻、-9であれば9時間前というように。
DateクラスのsetTime()の引数はミリ秒で指定しなければいけないので、diff * 36000000 として時間からミリ秒に変換しています。
3600000 = 60(分)* 60(秒)* 1000(ミリ秒) ということです。
var msg; は#1さんもおっしゃているように変数の定義をしているだけです。
2行目に書かずに5行目のmsgの前にvarと書いても同じことです。
すいません!おっしゃる通りたぶんまだ関数というのが理解できていないのだと思います。
しかし皆さんのおかげでだいぶ理解できるようになってきました!
No.1
- 回答日時:
順番に行きます。
> 引数の「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→終了
となります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript JavaScriptの即時関数の書き方 1 2022/11/29 09:52
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SetTimer関数について
-
アクティブなウィンドウのみ、...
-
functionのパラメータの渡し方...
-
エラー(型が一致しません。)...
-
プレロードイメージについて
-
char[]とchar*
-
VB6でユーザー定義型がNothing...
-
配列の要素番号を取得するには?
-
getURLとJavaScriptの連携について
-
ActionScriptで配列をクリアす...
-
FLASHでランダムでURLを表示さ...
-
変な質問ですみません、n番目の...
-
関数の中でaddEventListenerを...
-
C言語のsizeof(サイズオブ)演算...
-
DXRubyについてです
-
【ActionScript】配列の昇順降...
-
重複しない乱数整数を発生させる。
-
yes no で、50質問してyesの数...
-
サムネイルの写真にリンクをつ...
-
経過日数のカウントアップ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
TextChangeイベントが発生しない
-
LRESULTとHRESULT
-
ifdefとenum
-
#define 文
-
PHP + MySQL で登録時に重複チ...
-
jQueryの関数内の変数について...
-
クラス内に自作のイベントを定...
-
時間差を取得結果を求めるには
-
Javascriptのreturnについての...
-
fetchでreturnで戻り値
-
プレロードイメージについて
-
prototypeでajaxをする時に、on...
-
【JavaScript】イベント伝播の...
-
VBS 名前定義の確認→ありかなし...
-
JavaScriptの即時関数をアロー...
-
callbackってなんですか。
-
イベントリスナーの重複登録に...
-
関数定義について質問です 架空...
おすすめ情報