[英]Why does my browser keep crashing when I run this Javascript code?
[英]My javascript code is crashing when I put a random number generator/guesser into a function. Why does it crash?
我建立了一個隨機數發生器,用於猜測數字。 我限制了這個數字猜測者不要問兩次相同的數字,這在函數之外有效。 一旦將數字生成器/猜測器放入函數中,每幾次嘗試都會使窗口崩潰。 我相信這與無限循環中生成的數字有關。 誰能看到問題所在?
編輯:對於那些也喜歡看HTML的人。 在JS之前,我有兩個簡單的輸入:
<body>
<p>Think of a number!</p>
<select name="fingers" id="mynumber">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
<button id="startguess">Start guessing my number!</button>
以下是全局變量:
var guessed = [""];
var guess = "";
這是函數:
function doaguess(correctanswer) {
guess = Math.floor(Math.random() * 6);
var n = "";
n = guessed.includes(guess);
if (n == true) {
guess = Math.floor(Math.random() * 6);
} else {
if (guess == correctanswer) {
return (true);
} else {
return (false);
}
}
}
腳本的其余部分是這樣的:
document.getElementById("startguess").onclick = function() {
var mynumber = document.getElementById("mynumber").value;
var gotit = false;
var numberofguesses = 1;
while (gotit == false) {
if (doaguess(mynumber) == true) {
gotit = true;
alert("Got it! It was a " + mynumber + ". It took me " + numberofguesses + " guesses.");
} else {
numberofguesses++;
guessed.push(guess);
}
}
}
一切正常,直到我將生成器移到函數doaguess()
。 我嘗試將變量從局部變量移到全局變量以更改范圍,這使代碼起作用,但現在崩潰了。 任何幫助表示贊賞。
編輯:對於那些也喜歡看HTML的人。 在JS之前,我有兩個簡單的輸入:
如果您猜出(n == true)
之后的數字,那么您什么也不返回,並且該猜想可能是重復的,應該進入循環並尋找新的猜想。 當您猜測這種情況下的數字時,結果將不正確,並且正確的答案會添加到guessed
數組中,從而導致無限循環。
固定:
n = guessed.includes(guess);
while (n == true) {
guess = Math.floor(Math.random() * 6);
n = guessed.includes(guess);
}
if (guess == correctanswer) {
return (true);
} else {
return (false);
}
其這一行guessed.push(guess);
應該被guessed.push(mynumber);
它在這里工作:
var guessed = [""]; var guess = ""; function doaguess(correctanswer) { guess = Math.floor(Math.random() * 6); var n = guessed.includes(guess); if (n === true) { guess = Math.floor(Math.random() * 6); } else { return guess == correctanswer; } } document.getElementById("startguess").onclick = function() { var mynumber = document.getElementById("mynumber").value; var gotit = false; var numberofguesses = 1; while (!gotit) { if (doaguess(mynumber)) { gotit = true; alert("Got it! It was a " + mynumber + ". It took me " + numberofguesses + " guesses."); } else { numberofguesses++; guessed.push(mynumber); } } }
<button id="startguess">Guess</button> <input id="mynumber" type="number"></input>
我發現了問題。 每次我嘗試提供一個數字時變量都不會重置,因此,如果我多次嘗試而不重新加載頁面,則該變量似乎不起作用,因為存儲數字而不是在每個新的“播放”中重置數字。 要解決這一點,我需要重新設置變量和數組guess
和guessed
每個時間onclick
被按下。 像這樣:
document.getElementById("startguess").onclick = function() {
guessed = [""];
guess = "";
var mynumber = document.getElementById("mynumber").value;
var gotit = false;
var numberofguesses = 1;
while (gotit == false) {
if (doaguess(mynumber) == true) {
gotit = true;
alert("Got it! It was a " + mynumber + ". It took me " + numberofguesses + " guesses.");
} else {
numberofguesses++;
guessed.push(guess);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.