For循环冻结Javascript?

Posted

技术标签:

【中文标题】For循环冻结Javascript?【英文标题】:For Loop Freezes Javascript? 【发布时间】:2012-09-06 03:10:42 【问题描述】:

这是我的网络编程课程的一个小外部 js 脚本,它应该提示用户输入员工的工作时间,直到他们输入一个负数,当它打印一个具有适当行数的表格时(数字输入小时数的员工数),其中包含工作小时数列和工资列。但是最后关于 for 循环的一些事情是在我的浏览器中冻结 js 引擎。如果我将循环注释掉,提示就可以正常工作。如果我在屏幕上打印一些东西的废话 while 循环,提示仍然有效,然后 while 循环运行。但是这个愚蠢的 for 循环只是冻结了整个脚本,打开 html 页面实际上什么也没做。空白页。作业已经迟到了,我束手无策。

var empHours = 0;
var numEmployees = 0;
var empWage = 0;
var totalWages = 0;
var empWages = new Array();

do 
    empHours = prompt("Enter number of hours employee worked this week.");

    if (empHours > -1) 
        numEmployees++;
        if (empHours <= 40) 
            empWage = (15 * empHours)
            empWages[numEmployees-1] = empWage;
            totalWages += empWage;
         else 
            empWage = (15 * 1.5 * empHours);
            empWages[numEmployees-1] = (15 * 1.5 * empHours);
            totalWages += empWage;
        
    
 while (empHours > -1);

confirm("You have " + numEmployees + " employees, is this correct?");

var root = document.getElementById('tablediv');
var table = document.createElement('table');
var row, cell;

for (i=0; i<=numEmployees; i++) 
    document.write("Made it to for loop"):
    row = table.insertRow(i);
    for (j=0; j<3; j++) 
        cell = row.insertCell(j);
        cell.innerHTML(empWages[i])
    

root.appendChild(table);

【问题讨论】:

不,假设用户在输入完员工时间后输入否定。除此之外肯定我在做什么哈哈...... 1) 说明哪些浏览器受到影响,2) 将测试用例发布到 jsfiddle.net,3) 确保此 javascript 代码运行之后 DOM-ready ,最好是一些用户交互之后,比如点击按钮 【参考方案1】:

提示返回 null 或字符串。它不返回数字。

我建议你改成:

while (empHours && parseInt(empHours, 10) >= 0)

这可以防止null 并将字符串转换为数字,然后再检查它是否为负数。

另外,我建议您永远不要使用document.write() 进行调试。如果在错误的时间使用,它真的会弄乱现有的页面。您应该使用console.log() 或实际的调试器。

【讨论】:

wait 等等...循环作用于 numEmployees,它是递增的,而不是返回的。 @MassStrike - numEmployees 是一个全局变量。【参考方案2】:

您的问题似乎是语法错误,一个错字。

document.write("Made it to for loop"):
                                     ^
                                this is the problem in your for loop.

您上面的测试实际上也在删除表。删除document.write,您的代码就可以正常工作了。

DEMO

【讨论】:

宾果游戏。谢啦。我真的要开始实际阅读我的代码,然后再问这些天的问题哈哈...... @MassStrike - 你应该做的是总是在浏览器错误控制台或调试控制台中查看它报告任何脚本错误的地方。这将节省您数百小时的调试时间。 确实如此,是的,就我现在而言。但是,该表仍未打印。 @jfriend00 所说的,另外你可能还想在你的文本编辑器中添加一个语法验证插件。

以上是关于For循环冻结Javascript?的主要内容,如果未能解决你的问题,请参考以下文章

Python 在 for 循环期间冻结

为啥 JavaScript 会阻止 CSS 动画和过渡?

为啥我的输出在到达这部分代码时会冻结?

Javascript 游戏循环

JavaScript的流程控制之for循环语句和while循环语句

JavaScript for循环