簡體   English   中英

閉包中的JavaScript For-loop alter loop語句

[英]JavaScript For-Loop alter loop statement in closure

我有這樣一個for循環:

for (var i = 0, ii = 10; i < ii; i++) {
    var timer = setTimeout(function(i,timer) {
        return function() {
            clearTimeout(timer);
            if (condition) ii++;
        }
    }(i,timer), 1000);
}

我想做的是增加for循環在該for循環中延遲關閉內執行的次數。

問題在於,當執行10個定時器功能之一時,循環已經完成。 (我認為這是問題所在)

我想知道如何在這樣的timeout函數中更改ii ,而不必再次調用整個for循環。 (該過程必須保持一個循環)

您將無法完全按照自己的意願進行操作,因為傳遞給setTimeout任何函數都不會執行,直到當前函數完成為止。 例如,如果您嘗試:

setTimeout(function() {
    console.log('Hello!');
}, 100);
while (true) { }

您永遠不會看到'Hello!' 因為當前功能將永遠無法完成。 相反,您可以考慮創建一個函數,使其對給定ii變量的東西起作用。

function doStuff(ii) {
    // Do some stuff given ii
    if (condition) {
        setTimeout(function() {
            doStuff(ii + 1);
        }, 1000);
    }
}

for (var i = 0; i < 10; i++) {
    doStuff(i);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM