我主要使用LUA,并且在朋友的帮助下我一直试图用JavaScript制作一些东西,而且我不明白为什么这个循环超出了调用堆栈。
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();
}());
答案 0 :(得分:0)
看起来您正在尝试使用渐进式延迟进行递归循环。它在JS中的工作方式与在其他语言中的工作方式基本相同 - 您设置了一个边缘条件,可以在特定条件下停止循环,然后递归。您可以在超时时执行此操作。除非您必须停止已经开始的超时,否则无需清除它。我会更喜欢这样做:
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);
&#13;