Javascript 有没有办法暂停for循环直到变量为true

Javascript 有没有办法暂停for循环直到变量为true,javascript,Javascript,有没有办法暂停for循环直到变量为true?例如,如果我有这个代码 var flag = false; for(var i = 0; i < 15; i++){ console.log(i); } var标志=false; 对于(变量i=0;i

有没有办法暂停for循环直到变量为true?例如,如果我有这个代码

var flag = false; 
for(var i = 0; i < 15; i++){
    console.log(i);
}
var标志=false;
对于(变量i=0;i<15;i++){
控制台日志(i);
}
如果
i
等于7,我可以暂停循环直到
flag=true


谢谢

JavaScript是一种基于单线程事件的模型:如果您可以暂停执行,那么在此期间无法评估您的标志

此外,如果标志的值取决于用户事件,则需要等待事件触发,而不是等待变量更改

如您的示例所示,如果您事先知道何时要暂停循环,则应将其拆分:

for(var i = 0; i <= 7; i++){
    console.log(i);
}

document.querySelector("button").onclick = function() {
  for(var i = 8; i < 15; i++){
      console.log(i);
  }
}
如果循环中的代码很长,您可以将其包装到函数中(谢谢@tom):

实际上,您可以将管理循环和用户事件的所有逻辑隔离在一个函数中,该函数递归地为用户事件创建一个自己调用的处理程序。它还有一个优点,您可以根据需要多次停止循环

var-button=document.querySelector(“按钮”);
函数逻辑索引(索引){
用于(索引;索引<15;索引++){
控制台日志(索引);

if(Math.random()JavaScript是一个基于单线程事件的模型:如果可以暂停执行,那么在这段时间内就无法评估标志

此外,如果标志的值取决于用户事件,则需要等待事件触发,而不是等待变量更改

如您的示例所示,如果您事先知道何时要暂停循环,则应将其拆分:

for(var i = 0; i <= 7; i++){
    console.log(i);
}

document.querySelector("button").onclick = function() {
  for(var i = 8; i < 15; i++){
      console.log(i);
  }
}
如果循环中的代码很长,您可以将其包装到函数中(谢谢@tom):

实际上,您可以将管理循环和用户事件的所有逻辑隔离在一个函数中,该函数递归地为用户事件创建一个自己调用的处理程序。它还有一个优点,即您可以根据需要多次停止循环

var-button=document.querySelector(“按钮”);
函数逻辑索引(索引){
用于(索引;索引<15;索引++){
控制台日志(索引);

if(Math.random()否。循环将执行,直到条件为真。

否。循环将执行,直到条件为真。

您可以使用间隔和超时来模拟循环和更改
标志

函数计数(开始、结束、inc){
var i=启动;
返回函数(){
如果(i==8&&!标志){
回来
}
控制台日志(i);
i+=公司;
如果(i>=结束){
间隔时间;
}
}
}
var flag=false,
间隔=设置间隔(计数(0,10,1),500);
setTimeout(函数(){
flag=true;
},10000);

.as console wrapper{max height:100%!important;top:0;}
您可以使用间隔和超时来模拟循环和更改
标志

函数计数(开始、结束、inc){
var i=启动;
返回函数(){
如果(i==8&&!标志){
回来
}
控制台日志(i);
i+=公司;
如果(i>=结束){
间隔时间;
}
}
}
var flag=false,
间隔=设置间隔(计数(0,10,1),500);
setTimeout(函数(){
flag=true;
},10000);
.as控制台包装{max height:100%!重要;top:0;}
试试这个

var flag = false; 
for(var i = 0; i < 15; i++){ 
    If ((i > 6) && (! flag)){
        i = 6;
    } else {
         console.log(i); 
    }
}
var标志=false;
对于(var i=0;i<15;i++){
如果((i>6)和(!标志)){
i=6;
}否则{
控制台日志(i);
}
}
这将产生一个无限循环,但我认为您知道如何&where标志为真,可能语法不正确,但我给您提供了如何暂停循环的想法…

试试这个

var flag = false; 
for(var i = 0; i < 15; i++){ 
    If ((i > 6) && (! flag)){
        i = 6;
    } else {
         console.log(i); 
    }
}
var标志=false;
对于(var i=0;i<15;i++){
如果((i>6)和(!标志)){
i=6;
}否则{
控制台日志(i);
}
}

这将产生一个无限循环,但我认为您知道如何&where标志将为真,可能是语法不正确,但我会告诉您如何暂停循环…

ES6有一个称为生成器的东西,它可能对您有所帮助。它不是for循环,但可以“暂停”您的脚本。 请在此处阅读更多信息:

函数*idMaker(){
设指数=0;
而(指数<15){
产量指数++;
}
}
var gen=idMaker();
//console.log(gen.next().value);
//console.log(gen.next().value);
第(一代){
如果(下一代().done){
console.log(“全部完成”);
}否则{
控制台日志(i);
}

}
ES6有一种叫做生成器的东西,它可能对您有所帮助。它不是for循环,但可以“暂停”您的脚本。 请在此处阅读更多信息:

函数*idMaker(){
设指数=0;
而(指数<15){
产量指数++;
}
}
var gen=idMaker();
//console.log(gen.next().value);
//console.log(gen.next().value);
第(一代){
如果(下一代().done){
console.log(“全部完成”);
}否则{
控制台日志(i);
}

}
No…听起来你试图以错误的方式解决问题。为什么要暂停循环?你可以查看已解决的承诺,然后在循环中开始等待该承诺,当i==7:@tymeJV我正在制作一个Simon游戏,我不希望我的循环继续,直到用户单击某些按钮。不…听起来像您试图以错误的方式解决问题。为什么要暂停循环?您可以查看已解决的承诺,然后在循环中开始等待该承诺,当i==7:@tymeJV我正在制作一个Simon游戏,我不希望循环继续,直到用户单击某些按钮。好的……我会尝试。有办法重新开始吗-在不使用相同变量创建新for循环的情况下进入循环?@StephenParsero不,没有。@StephenParsero如果for循环的主体较长,可以通过将主体移动到新函数,然后从两个循环调用该函数来避免重复。您可以