2017-03-10 15 views
0

私は、関数内で定義した変数の中に格納された情報にアクセスする方法があるかどうかを調べようとしていますか?私はここでやろうとしていることをどうやってやるのかちょっと混乱しています...関数内で定義された変数から情報を取得する方法はありますか?

注:これは完全なコードではありませんが、私は助けが必要です。

let question1 = new Question("What is California State Flower?", "1. Rose. 2. Tulip. 3. Poppy"); 
firstQuestion(); 


function firstQuestion(){ 
    let someAnswer = prompt(question1.questionName + " " + question1.questionString); 
} 

if (someAnswer == "poppy"){ 

私はsomeAnswerが関数内で定義されたので、質問の答えは正しいですが、私はそれを行うことができないかどうかを把握するためにif文を使用しようとしています....と私はもしわかりません関数を使わずにこれを行う方法がありますか?

更新:

[OK]を、私は働いている作品だが、今の私のコードのif/else文が機能していません。私が間違った答えを入れると、正しい答えがあると言います。私はそれについて論理的な理由は実際には見ません...

//store score total 

let pointsCount = 0;

//questions 
class Question { 
questionName: string; 
questionString: string; 

constructor(questionName:string, questionString:string){ 
    this.questionName = questionName; 
    this.questionString = questionString; 
} 
} 


//question one 
let question1 = new Question("What is the California State Flower?", "1. Rose. 2. Tulip. 3. Poppy."); 
let firstAnswer = firstQuestion(); 
function firstQuestion(){ 
    return prompt(question1.questionName + " " + question1.questionString); 
} 

if (firstAnswer === "Poppy" || "poppy"){ 
    pointsCount ++; 
alert("You got it!" + " " + "You now have" + " " + pointsCount + " " + "points!"); 

} else { 
    alert("Wrong!" + " " + "You now have" + " " + pointsCount + " " + "points!"); 

} 


//question two 

let question2 = new Question("What is the California State Bird?","1. Quail. 2. Eagle. 3. Penguin.") 

let secondAnswer = secondQuestion(); 

function secondQuestion(){ 
    return prompt(question2.questionName + " " + question2.questionString); 
} 

if (secondAnswer === "quail" || "Quail"){ 
    pointsCount++; 
    alert("You got it!" + " " + "You now have" + " " + pointsCount + " " + "points!"); 
} else if (secondAnswer !== "quail" || "Quail") { 
    alert("Wrong!" + " " + "You now have" + " " + pointsCount + " " + "points!"); 
    } 
+0

関数の外部で変数 'someAnswer'を定義します。 – Satpal

+1

関数からの結果を'返す '。 – zerkms

+0

このQ&Aの範囲を確認してください: http://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript – jgrdpy

答えて

1

を必要とするものです。 firstQuestion関数から何も返さないので、これを実行するときに実際に何も起こりません。

let question1 = new Question("What is California State Flower?", "1. Rose. 2. Tulip. 3. Poppy"); 
let answer = firstQuestion(); 


function firstQuestion(){ 
    // return whatever the user enters in the prompt 
    return prompt(question1.questionName + " " + question1.questionString); 
} 

if (answer.toLowerCase() == "poppy"){ 
    // call .toLowerCase on your answer to ensure you've covered capitalization edge-cases 
} 
+0

hmmm ...私はこれを試して、私のif/else文が動作していないのですか?私が間違った質問に答えると、正しい答えが得られたと言われています....なぜこのことが起こるのかはわかりません。 –

+0

私は上記の更新されたコードを投稿しました。 –

+0

nvm私はそれを得た。 –

0

たぶん、これは、あなたが近くにいる

let someAnswer; 
function firstQuestion(){ 
    someAnswer = prompt(question1.questionName + " " + question1.questionString); 
} 
+1

サイドノート:この特定のケースでは、本当に理由はありません関数からの単純な 'return'よりも自由変数を好む。それは利益をもたらすものではなく、コードを維持することをより困難にします。 – zerkms

+2

プロンプトとしての機能を持っていても、非同期アクションではありません。 'let someAnswer = prompt( 'question')' – synthet1c

+0

彼は機能全体からコードを削除するか、返品をすることができます.OPが必要なものに応じて – Merigold

関連する問題