javascript循环超过调用堆栈

时间:2017-11-14 18:36:56

标签: javascript

我主要使用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();
}());

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试使用渐进式延迟进行递归循环。它在JS中的工作方式与在其他语言中的工作方式基本相同 - 您设置了一个边缘条件,可以在特定条件下停止循环,然后递归。您可以在超时时执行此操作。除非您必须停止已经开始的超时,否则无需清除它。我会更喜欢这样做:

&#13;
&#13;
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;
&#13;
&#13;