有没有办法暂停for循环,直到变量为真?例如,如果我有这个代码,
var flag = false;
for(var i = 0; i < 15; i++){
console.log(i);
}
Run Code Online (Sandbox Code Playgroud)
并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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你不知道它(因为它是在for循环中决定的)你只需要确保下一次循环在它停止的点开始时(例如,通过重用i变量).
for (var i = 0; i < 15; i++) {
console.log(i);
if (Math.random() < 0.2) { break; }
}
document.querySelector("button").onclick = function() {
for (i++; i < 15; i++) {
console.log(i);
}
}
Run Code Online (Sandbox Code Playgroud)
如果循环内的代码很长,你可以将它包装在一个函数中(感谢@ tom):
function logIndex() {
//some code
console.log(i);
}
Run Code Online (Sandbox Code Playgroud)
实际上,您可以隔离所有逻辑以在单个函数中管理循环和用户事件,递归地为用户事件创建处理程序以调用自身.它还有一个优点,你可以根据需要多次停止循环.
var button = document.querySelector("button");
function logIndexes(index) {
for (index; index < 15; index++) {
console.log(index);
if (Math.random() <= 0.2) {
return button.onclick = function() {
logIndexes(index + 1);
}
}
}
button.onclick = null;
}
logIndexes(0);Run Code Online (Sandbox Code Playgroud)
<button>Click me!</button>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |