for(var i=0; i<1000000; i++) { //do some thing. }
话说以上代码很可能会被浏览器判作执行超时。
试验了一下可以用浏览器的延时来做:
(function() { //do some thing. setTimeout(arguments.callee, 0); })();
这样一来CPU倒是基本没有,但是这样的代码运行过慢,所以综合一下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> new document </title> <script type="text/javascript"> var interval = function(f, o) { var _onceRunTime = 5000;//每5秒一个新的任务队列 var i = 0; (function() { var _st = new Date().getTime(); while(true) { if(new Date().getTime() - _st > _onceRunTime) break; if(!f.call(o, i)) return; i++; } setTimeout(arguments.callee, 0); })(); }; function run(i) { document.getElementById("log").value = i; return i<1000000; } function test() { interval(run, this); } </script> </head> <body> <input type="text" id="log" /> <button id="b" onclick="test();">start</button> </body> </html>
注意运行时也会使浏览器无反应,不过在每一个任务队列结束时仍然有机会刷新面。