页面崩溃(可能是由于多维数组?)

时间:2015-09-11 18:38:33

标签: javascript jquery html crash infinite-loop

我的编程中有一个超级奇怪的错误,我无法弄明白。这是代码的小提琴: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;
&#13;
&#13;

3 个答案:

答案 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();

}