有沒有辦法暫停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