Javascript - 循环内循环

时间:2016-02-04 17:25:52

标签: javascript loops variables for-loop

我有以下代码:

 for (i = 0; i < 3; i++){ //big loop
    console.log("Start of round" + i)
    for (s = 0; s < 5000; s++){ //small loop aka delay loop
        console.log("End of round" + i);
    }
    s = 0; //reset

}

刚开始 - 我知道还有其他方法可以解决这个问题。事情是,我正在尝试进一步了解循环,所以我选择了这个例子,请告诉我我错在哪里。

所以我有一个应该自行运行3次的循环。并且每次它自己运行时,都会有一个循环,它应该会延迟进程。 问题是,延迟在第2次和第3次停止发生。

以下是我认为应该发生的事情

1)首先i = 0,继续循环

2)延迟进一步进行内部循环

3)当延迟循环结束时,重置小循环的s var,所以当i = 1时它会自动运行;并且更大的循环将重新开始

4)当i = 1时,大循环再次开始;所以继续,再次运行延迟循环,因为我们最后一次重置了var。

5)当i = 2时重复

我在这里失踪的是什么?我想更深入地了解javascript循环。谢谢。

3 个答案:

答案 0 :(得分:4)

延迟没有真正的区别,你所看到的是控制台在for循环中努力快速更新。

for (i = 0; i < 3; i++){ //big loop
    console.log("Start of round" + i);
    console.time(i);
    for (s = 0; s < 5000; s++){ //small loop aka delay loop
        console.log("End of round" + i);
    }
    console.timeEnd(i);

}

当您记录处理时间时,您会看到数字几乎相同。

如果删除日志行,可以更清楚地看到循环相同+ - 毫秒

for (i = 0; i < 3; i++){ //big loop
    console.log("Start of round" + i);
    console.time(i);
    for (s = 0; s < 5000; s++){ //small loop aka delay loop
    }
    console.timeEnd(i);

}

浏览器将优化代码,因为您需要更快的代码作为开发人员和用户。

如果你真的想要延迟,你需要使用setTimeout或setInteral

var count = 0;
function round () {
    console.log(count);
    count++;
    if(count<3) {
        window.setTimeout(round, 2000);
    }
}
round();

答案 1 :(得分:2)

首先,您不需要使用循环作为延迟,而是可以使用:

setTimeout(functionReference, timeOutMillis);

第二:你不需要重置s。当您进入第二个循环时,它将自动设置为0.

答案 2 :(得分:0)

我认为你这样做是因为在JavaScript中,线程不存在,你的代码实际上在我的浏览器上运行,自s=0;以来你不需要for声明为你做。

for (i = 0; i < 3; i++){ //big loop
    console.log("Start of round" + i)
    for (s = 0; s < 5000; s++){ //small loop aka delay loop
        console.log("End of round" + i);
    }

}

您可以使用setTimeout函数来代替使用该延迟:

setTimeout(function, timeInMilliseconds);

并将您的日志放入一个函数并运行它,这是一种使用&#39;线程&#39;没有&#39;线程&#39;(因为并不像一个人那样工作)