有没有办法暂停for循环,直到变量为真?举例来说,如果我有这个代码,有什么办法暂停for循环,直到变量为真
var flag = false;
for(var i = 0; i < 15; i++){
console.log(i);
}
和i
等于7,我可以暂停循环,直到flag = true
?
谢谢!
有没有办法暂停for循环,直到变量为真?举例来说,如果我有这个代码,有什么办法暂停for循环,直到变量为真
var flag = false;
for(var i = 0; i < 15; i++){
console.log(i);
}
和i
等于7,我可以暂停循环,直到flag = true
?
谢谢!
JavaScript是一个基于事件的单线程模型。如果您暂停执行,则无法在此期间评估您的旗帜。
相反,您应该退出循环,捕获更改标志的事件,并在您离开它的位置回到循环。
例如:
var flag = false;
for (var i = 0; i < 15; i++) {
console.log(i);
// the following makes no sense, it is just an example
if (i === 7) {
break;
}
}
document.getElementById('my_button').onclick = function(e) {
i++;
for (i; i < 15; i++) {
console.log(i);
// it starts where you left it
}
}
<div id="my_button">Click me!</div>
好的...我会试试。 – stephenpassero
有没有办法重新进入循环,而没有为同一个变量创建一个新的循环? – stephenpassero
你为什么想这样做?使用相同的变量是IMO的最佳选择。 – David
编号A循环将执行,直到条件为真。
您可以使用超时间隔来模拟循环并更改flag
。
function count(start, end, inc) {
var i = start;
return function() {
if (i === 8 && ! flag) {
return;
}
console.log(i);
i += inc;
if (i >= end) {
clearInterval(interval);
}
}
}
var flag = false,
interval = setInterval(count(0, 10, 1), 500);
setTimeout(function() {
flag = true;
}, 10000);
.as-console-wrapper { max-height: 100% !important; top: 0; }
OP表示,直到变量为真,如何10000毫秒,直到?说实话,他应该使用Observable模式。让循环运行到第7次迭代,观察将标志设置为真的事件,然后从第8次起继续迭代 –
试试这个
var flag = false;
for(var i = 0; i < 15; i++){
If ((i > 6) && (! flag)){
i = 6;
} else {
console.log(i);
}
}
这将作出一个无限循环,但我想你知道如何&,其中标志将是真实的,可能是语法是不正确的,但我给你的想法是如何暂停一个循环...
ES6有一些东西叫做发电机,可能对你有所帮助。这不是for循环,但可以“暂停”你的脚本。 在这里阅读更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators
function* idMaker() {
let index = 0;
while (index < 15) {
yield index++;
}
}
var gen = idMaker();
//console.log(gen.next().value);
//console.log(gen.next().value);
for (i of gen) {
if (gen.next().done) {
console.log('all done');
} else {
console.log(i);
}
}
不......听起来像你试图解决问题的错误的方式。你为什么要暂停循环? – tymeJV
你可以看看承诺,得到解决,然后在循环内开始等待这个承诺,当我== 7:https://developers.google.com/web/fundamentals/getting-started/primers/promises – Dimitri
@tymeJV我' m制作Simon Game,我不想让我的循环继续,直到用户点击某些按钮。 – stephenpassero