現在javascript勉強中のものです。
以下の電車ナビのコードについて質問です。
// 行き先の駅に停まる電車の種類を表示する処理 function displayTrainType() { var station = inputStation(); var type = getTrainType(station); // 入力された値が選択肢の範囲内なら正しいメッセージを出力 if(station >= 1 && station <= 3) { alert("その駅には" + type + "の電車が停まります"); } else { // 選択肢以外のものを入力した場合は再度入力処理の関数を実行 displayTrainType(); } } // 駅名を入力する処理 function inputStation() { var station = prompt("1.A駅 2.B駅 3.C駅\n行き先の駅を1, 2, 3から選んでください"); station = Number(station); return station; } // その駅に停まる電車の種類を取得する処理 function getTrainType(station) { var type; switch(station) { case 1: type = "快速"; break; case 2: type = "快速と急行"; break; case 3: type = "特急"; break; default: alert("駅が正しく選択されませんでした。もう一度入力してください。"); break; } return type; } // // 呼び出し元 処理を実行する displayTrainType();
以上のコードで**2つ質問があります**。
まず一つ目です。
最初のfunctionで以下のコードになっていますが
// 行き先の駅に停まる電車の種類を表示する処理 function displayTrainType() { var station = inputStation(); var type = getTrainType(station); // 入力された値が選択肢の範囲内なら正しいメッセージを出力 if(station >= 1 && station <= 3) { alert("その駅には" + type + "の電車が停まります"); } else { // 選択肢以外のものを入力した場合は再度入力処理の関数を実行 displayTrainType(); } }
このコード内の再度入力処理を促すdisplayTrainType();と
コード全体の結果を反映させるdisplayTrainType();では反映に違いがあります。
再度入力処理を促すdisplayTrainType();では、なぜ全体の結果を反映できないようになっているのでしょうか。
上記のコード内では
var station = inputStation(); var type = getTrainType(station);
のようにすでに戻り値が定義されているので、最初のfunction内で結果が反映されていてもてもおかしくないんじゃないかと思ったためです。
二つ目の質問です。
// 駅名を入力する処理 function inputStation() { var station = prompt("1.A駅 2.B駅 3.C駅\n行き先の駅を1, 2, 3から選んでください"); station = Number(station); return station; } // その駅に停まる電車の種類を取得する処理 function getTrainType(station) { var type; switch(station) { case 1: type = "快速"; break; case 2: type = "快速と急行"; break; case 3: type = "特急"; break; default: alert("駅が正しく選択されませんでした。もう一度入力してください。"); break; } return type; }
それぞれの関数内で出た変数を、最初の総括部分のfunctionに戻り値として
返していますが、その関数内で出たローカル変数をreturnで他の関数に送っても
良いのでしょうか。
グローバル変数にしか引き継いでいけないのかと考えていたためです。
分かりづらい説明ですみません!
恐縮ではございますがお答えしていただけると幸いです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー