Re: [問題] Javascript 的迴圈似乎會先執行完畢才씠…

看板Web_Design作者 (骨頭)時間16年前 (2007/10/02 21:51), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串1/1
※ 引述《logs ()》之銘言: : 用 C/C++ 等語言寫程式碼的時候 : for (i=0;i<100000;i++){ : cout<<i<<endl; : } : 這樣會按照不同電腦的執行效能 : 各有快慢地「逐行」顯示 : 但是 javascript 的迴圈似乎有一個特性 : 一律先算完,才出現結果 : for (i=0;i<10000;i++){ : out.innerHTML+=i+"<br>"; : } : <textarea id=out></textarea> : 這樣的JS似乎不會一一顯示,而是一次突然全部顯示 no 還是分次顯示 不然你可以在理面下個alert就可以看到效果了 for (i=0;i<10000;i++){ out.innerHTML+=i+"<br>"; alert('stop'); } 只是 js engine還在跑 , 而且js執行的間隔時間本來就蠻短的 所以browser 一直處於 處理中的狀態 這跟一次全部顯示的意義不太一樣, 它是"沒空分別顯示"。 : 有試過呼叫空回圈函式,修改如下 : function twait(t){ : var now=new Date(); : var init=now.getTime(); : while((now.getTime()-init)<t){now=new Date();} : } : for (i=0;i<100;i++){ : twait(100); : out.innerHTML+=i+"<br>"; : } : 結果當然也是等了好久,結果一次全部秀出來...... 你的twait也會鎖住執行緒 (那段時間執行了大量的while結構 , 所以browser還是很忙) 你可以試著用window.setTimeout做遞回 把它變成非同步的處理模型就可以了... : 該怎麼做才能使 JS 表現出像 C/C++ 那樣 : 有多少結果就馬上 show 出來,不要等到最後才出現 讓它的間隔時間長一點 不過相對的 , 寫完全部資料的時間也會久一點. 這個可以算是某種程度的緩衝吧 --  ▄▅▆▇███▇▆▅▄▃        ╰┼╯─╮ ╮         ◥███████████◣       ╰┼╯=│=│         ◥██████───────    *. ╯  ╯ ╯ の 物 語 .*  ◥███████──────◣ ~ ◢◣             ◢◣  ◥██████───────◤   ◥◤  空白的世界.翼 ◥◤  ◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂telnet://tony1223.no-ip.info -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.76.202

10/02 22:07, , 1F
所以問題出在 JS 跑太快,obj.innerHTML 跑太慢 是這樣嗎?
10/02 22:07, 1F

10/02 23:09, , 2F
問題出在瀏覽器無法同時執行js又顯示畫面....
10/02 23:09, 2F

10/03 09:47, , 3F
如果只是要做出顯示的效果,那把迴圈改成setTimeout來做吧
10/03 09:47, 3F
文章代碼(AID): #170apfAF (Web_Design)