的问题是,你的while
循环是快速。你不会看到输出。浏览器需要一些时间来更新文档。你可以在控制台中逐个看到它的原因,仅仅是因为控制台要慢。控制台输出延迟线。当您看到控制台中的最后一个条目正在启动时,您的代码已经很久之前就结束了。您的代码执行速度比控制台更快。所以这也不是时间。
显示控制台的真实速度非常简单。看看this example。执行时,会有一个简单的循环在控制台中创建日志条目。之后,我们只打印loop finished
的内容。当您在文档中看到输出时,即使脚本已停止,控制台仍会打印行。
您现在可以尝试在循环执行中给浏览器一些时间来输出数据并让浏览器呈现更改。但是因为你在那里使用了循环,所以在开始下一个循环之前,你不能将它设置为异步或者延迟输出值。但是,在打印下一行之前,您可以将代码切换为自动执行的功能,并在浏览器中平滑一点点时间以实现平滑输出。
如果你创建了这样的大循环,你应该真正照顾你的代码。让jQuery再次搜索每个循环中的#log
div并不是一个好主意。在循环之前只做一次。并且不要为这个简单的字符串操作使用数组。这会让它变得更慢。
var log = $("#log");
var generateTestCases = 3000;
(function next(amount) {
if(amount) {
var repeatIF2 = 10;
var trackingString = amount + ";";
(function output(count) {
if(count) {
trackingString += count + ";";
log.append('<div>' + trackingString + '</div>');
if(--count) {
// this line slows down the output
// change the time for faster or slower output
setTimeout(output, 50, count);
} else {
next(--amount);
}
}
})(repeatIF2);
}
})(generateTestCases);
Working example.
你说的 “马上” 的意思吗?它实际上是“马上”发生的,但它实际上很快,你看不到它。 while循环正在发生,并且正在逐个打印控制台消息以及div元素,但它的速度非常快,看起来好像是在立即执行。你想在它们之间增加某种延迟吗? – briosheje
有三个循环用完..你想打印字符串的位置? – Poonam
@briosheje:抱歉,不清楚:无论您添加多少次重复循环,都可以一个接一个地看到console.log。然而,appendTo(作为其中一种可能性)似乎并没有这样做。只有整个代码执行完毕,我才将所有字符串看作一个字符串。 – TheRealPir