2017-11-14 5 views
0

Ich benutze meist LUA und ich habe versucht, etwas mit JavaScript mit etwas Hilfe von einem Freund zu machen, und ich verstehe nicht, warum diese Schleife die Aufrufliste überschreitet.Javascript Schleife über Callstack

var myVar; 
(function loop() { 
    for (var x = 0, ln = 3; x < ln; x++) { 
     myVar = setTimeout(function(i) { 
      console.log(i); 
     }, x * 333, x); 
     clearTimeout(myVar); 
    } 
    loop(); 
}()); 
+3

'clear (myVar);' <- Warum das Timeout schaffen, als klar oder? – epascarello

+7

Sie rufen 'loop' von innerhalb' loop', führt zu unendliche Rekursion – Hamms

+0

Sie rufen Schleife aus innerhalb der Schleife, * unbedingt *, führt zu unendliche Rekursion –

Antwort

0

Es sieht so aus, als ob Sie versuchen, eine rekursive Schleife mit einer progressiven Verzögerung zu erstellen. Es funktioniert in JS genauso wie in anderen Sprachen - Sie legen eine Randbedingung fest, die die Schleife bei einer bestimmten Bedingung stoppt und dann rekursiv wird. Sie können dies in einer Zeitüberschreitung tun. Es gibt keine Notwendigkeit, es zu löschen, es sei denn, Sie mussten eine bereits begonnene Zeitüberschreitung stoppen. Ich würde es tun, wie folgt:

var start = 0; 
 
var ln = 3; 
 

 
(function loop(i) { 
 
    if (i > ln) return // edge condition 
 
    setTimeout(() => { 
 
    console.log(i); 
 
    loop(i + 1); // recurse 
 
    }, i * 333, i); 
 
})(start);

Verwandte Themen