的問題是,你的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