Javascript - 无法摆脱循环

时间:2017-06-02 16:51:20

标签: javascript node.js loops while-loop

我无法找到摆脱这种循环的方法。  到目前为止,我尝试的一切都失败了。

var st = 20;
var timeNow = new Date();  

var isprinted = false; 

var time = st - timeNow.getHours();
while (isprinted === false) {
    while(time = 2) {
        console.log("2h screenLeft"); 
        isprinted = true;
        return 0;
    } 
}

2 个答案:

答案 0 :(得分:1)

您在内循环的条件下使用单个等号:

(time = 2)

该作业将始终返回true,因此您的内部while永远不会结束。

在JavaScript中,单个等号用于赋值,而不是比较。将其更改为两个(与转换比较)或三个(没有转换的比较)等号。

(time === 2)

您需要非常小心while循环,因为很容易遇到循环终止条件永远不会发生的情况。即使修复了等号问题,您的time变量似乎也没有改变,因此您将始终进入内循环。

现在,让我们看一下代码的其余部分,并按照它进行操作:

var st = 20;
var timeNow = new Date();  
var isprinted = false; 
var time = st - timeNow.getHours();

就在这里,您正在检查isprinted是否正好false

while (isprinted === false) {

这没关系,但写起来更简单:

while (!isprinted) {

所以,既然你把变量设置为false,我们就进入第一个循环并点击第二个循环的条件(假设你已经修复了等号问题):

    while(time === 2) {
        console.log("2h screenLeft"); 
        isprinted = true;
        return 0;
    } 

要退出循环,请使用break而不是return

但是,由于除了内部循环之外没有任何其他外部循环专用代码,你应该只有一个基于复合条件的循环,你不必担心会破坏它在所有:

最终代码:

var st = 20;
var timeNow = new Date();  
var isprinted = false; 
var time = st - timeNow.getHours();

while (!isprinted  && time === 2) {
        console.log("2h screenLeft"); 
        isprinted = true;
}

这是一个测试用例:

    var st = 20;
    var timeNow = new Date();  
    var isprinted = false; 
    var time = st - timeNow.getHours();
    
    time = 2; // Forced value for testing

    while (!isprinted  && time === 2) {
            console.log("2h screenLeft"); 
            isprinted = true;
    }

答案 1 :(得分:0)

您无法摆脱循环,因为您将时间设置为2而不是检查其值。

请改为尝试:

  while (isprinted === false) {
   while(time == 2) {
    console.log("2h screenLeft"); 
    isprinted = true;
    break;  //This should be break, so you can obviously break from the loop
      } 
    if(time != 2)
       break;
   }