2016-08-27 14 views
1

JavaScriptに問題があります。私はボタンを押すと実行される関数を持っています、変数はJavaScriptを介して変更されます。関数内のすべてが正常に動作しますが、この1つの最後の部分は:私はこのコードを実行するとなぜこのコードは無限ループを作成しますか?

else if (upgrade == "upgMiner4") { 
var cost="500"; 
var qty="1"; 
var readCash=parseInt(document.getElementById("cash").innerHTML); 
while (readCash >= cost) { 
document.getElementById("cash").innerHTML += "-"+cost; 
document.getElementById("cash").innerHTML = eval(document.getElementById("cash").innerHTML); 
document.getElementById("gpt").innerHTML += "+"+qty; 
document.getElementById("gpt").innerHTML = eval(document.getElementById("gpt").innerHTML); 
} 
} 

、それがフリーズすると無限ループを作成します。私はここに問題がないと思うので、皆さんが助けてくれるかどうか知りたいのですが、ありがとう! whileループ内の

-Zachucks

+1

HTML要素の内容を評価しているようです。これは興味深く潜在的に危険なことです。このルートが選ばれた理由を聞くことができますか? – jedifans

+0

html要素の内容を評価するのではなく、より良い方法はありますか? – Zachucks

+0

あなたは変数のように使用しているようですので、変数を使用してください:) – jedifans

答えて

3

あなたのコードは、条件(readCash >= cost)がtrueの場合、これは決して変わらないのでreadCashまたはcostを更新するために何もしない、とwhileループは決して終了します。

私は、読者は評価が評価されているかどうかを知ることができないので、何が起こっているのかを確かめるのは難しいです。ただし、readCashcostに一度だけ割り当ててください。これは決してもう一度実行しないでください。ではなぜそれが変わるだろうか?

0

readCash値を1回だけ設定し、divでinnerHTMLと共に更新しないためです。だからあなたのループは終わらないのです。

の作業コード:

while (readCash >= cost) { 
document.getElementById("cash").innerHTML += "-"+cost; 
document.getElementById("cash").innerHTML = eval(document.getElementById("cash").innerHTML); 
document.getElementById("gpt").innerHTML += "+"+qty; 
document.getElementById("gpt").innerHTML = eval(document.getElementById("gpt").innerHTML); 
readCash = document.getElementById("cash").innerHTML; 
} 
0

もないreadCashまたはコスト変数は、最後の whileループに変化しています。そのため、あなたはループに直面しています。おそらく増減する必要がありますreadCashまたはコストあなたが欠けているロジックを持つバール。または、実際にはが必要ですが、の文は、の場合

関連する問題