我无法找到摆脱这种循环的方法。 到目前为止,我尝试的一切都失败了。
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;
}
}
答案 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;
}