【问题标题】:Page crashing (possibly due to multidimensional arrays?)页面崩溃(可能是由于多维数组?)
【发布时间】:2015-09-11 18:38:32
【问题描述】:

我的编程中有一个非常奇怪的错误,我无法弄清楚。这是代码的一部分: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>

【问题讨论】:

    标签: javascript jquery html crash infinite-loop


    【解决方案1】:

    当你随机两次相同的数字时会发生这种情况。由于您的随机数是在循环之外生成的,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】:

      如果您的“while”检查失败,它永远不会失败。您没有在 do...while 循环内生成 randTaskNum,因此它永远不会改变。你的循环永远运行。将 randTaskNum 赋值移动到 do...while 循环内部。

      【讨论】:

        【解决方案3】:

        如果 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();
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-16
          • 2020-12-18
          • 1970-01-01
          相关资源
          最近更新 更多