2017-01-03 8 views
0

私はこのコードをテストして、ユーザーが番号を追加するだけであることを確認します。そうした場合、その番号に警告したいと思います。 最初のプロンプトで文字のみでテストし、2番目のプロンプトで数字に変更しても、まだNaNが返されます。 これを修正する方法:このコードのグローバルスコープとローカルスコープの問題?

var mynum = prompt("Enter the number you wish"); 

function isitanumber(numb){ 
    while (isNaN(numb) == true){ 
     numb = prompt("Please add a valid number"); 
    } 
} 

isitanumber(mynum); 
alert("The number you have added is " + mynum); 

答えて

1

私の最高の推測では、ユーザが初期promptで任意のテキストを入力したら、あなたのmynum変数が更新された値を取得していないということでしょう。だから私はreturn呼び出し時の関数から毎回値を提案し、グローバル変数を更新します。

var mynum = prompt("Enter the number you wish"); 
 

 
function isitanumber(numb) { 
 
    while (isNaN(numb)) { 
 
    return parseInt(prompt("Please add a valid number")); //return 
 
    } 
 
} 
 

 
mynum = isitanumber(mynum); //update the variable 
 

 
alert("The number you have added is " + mynum);

あなたはまた、以下のように、この場合にdo-whileを使用することができます。あなたが実行可能なスニペットとしてのコードを投稿することができ

var mynum; 
 
do{ 
 
    mynum = parseInt(window.prompt("Please enter a number", "")); 
 
}while(isNaN(mynum)); 
 

 
alert("The number you have added is " + mynum);

+0

ありがとうGuruprasad!それはすべてうまくいった。私はリターンメソッドを使用しました。返品方法がなぜ機能するのか聞いてもらえますか?私はリターンがループを壊して勝ったと思った、それは最初の後に実行させない?これは正しいです? – nishkaush

+0

そのように、ユーザーが数字以外の値を入力するたびに、有効なnumが入力されるまで再帰を行うプロンプト自体が返されます。だから、たとえそれが返っても、それはプロンプトでそこに戻ってくる。 –

2

あなたのコードは正常に動作する必要があります。あなたは2番目のプロンプトから値をつかむのを忘れてしまった。これは、仕事ができる:ここで

var mynum = prompt("Enter the number you wish"); 

function isitanumber(numb){ 
    while (isNaN(numb) == true){ 
     numb = prompt("Please add a valid number"); 
    } 
    //This sets the value you are displaying to the new input 
    mynum = numb; 
} 

isitanumber(mynum); 

alert("The number you have added is " + mynum); 

は、このコードが実行される:https://jsfiddle.net/ruvn2uf0/

+0

... ;-) – RobG

+0

グローバルな設定を取り除くためにそれをきれいにするのはいいかもしれない関数内から。 –

+0

ありがとうございました!それは大きく助けた! – nishkaush

関連する問題