我的编程中有一个超级奇怪的错误,我无法弄明白。这是代码的小提琴:https://jsfiddle.net/JocaPinto/tb07smte/4/ 我的问题是,如果单击该按钮足够多次,页面将崩溃,至少在我的计算机中。这种情况发生在我开始使用多维数组时,但我尝试使用一维,它仍然做同样的事情。为什么会崩溃?我是否有任何无限循环监督?
感谢无论谁回答!!
另外,由于某种原因Stack Overflow说我需要在链接之外发布代码,所以这里是:
var tasks = [
["First Task...",2],
["Second Task...",4],
["Third Task!",6]];
function nextTask() {
var previousText = $("#taskText").text();
var randTaskNum = Math.floor(Math.random() * tasks.length);
do {
$("#taskText").text(tasks[randTaskNum][0] + tasks[randTaskNum][1]);
} while(previousText == $("#taskText").text());
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button onclick='nextTask()'>Click me</button>
<p id='taskText'>Task goes here</p>
&#13;
答案 0 :(得分:2)
如果您的任务未能通过&#34;而#34;检查,它永远不会失败。你没有在do ... while循环中生成randTaskNum INSIDE,所以它永远不会改变。你的循环永远运行。将randTaskNum赋值移动到INSIDE do ... while循环。
答案 1 :(得分:2)
当您将相同的数字随机两次时会发生这种情况。由于您的随机数是在循环外生成的,previousText == $("#taskText").text()
将始终评估为true,因为您永远不会更改数字。快速解决方法是在循环中移动随机数:
var tasks = [
["First Task...",2],
["Second Task...",4],
["Third Task!",6]];
function nextTask() {
var previousText = $("#taskText").text();
do {
var randTaskNum = Math.floor(Math.random() * tasks.length);
$("#taskText").text(tasks[randTaskNum][0] + tasks[randTaskNum][1]);
} while(previousText == $("#taskText").text());
}
小提琴:https://jsfiddle.net/tb07smte/5/
更好的解决方法是防止随机数等于最后一个。
答案 2 :(得分:2)
如果previousTask与您在函数中选择的随机任务相同,它将进入无限循环。要解决此问题,请在选择下一个随机任务后分配上一个任务。
var tasks = [
["First Task...",2],
["Second Task...",4],
["Third Task!",6]];
function nextTask() {
var randTaskNum = Math.floor(Math.random() * tasks.length);
do {
$("#taskText").text(tasks[randTaskNum][0] + tasks[randTaskNum][1]);
} while(previousText == $("#taskText").text());
var previousText = $("#taskText").text();
}