原因就是你查到的 setTimeout只执行一次, setInterval在没有 clear前会一直执行
代码1中改成setInterval的结果就是将有N个setInterval在运行所以cpu会上100%用setTimeout不断的运行是因为你在 setTimeout里调用的函数"timeapper"里也有 setTimeout这样就形成了一个循环... 类似递归,和递归不同的一点就是有个执行的时间延迟...比如
<div id="t" style="border:1px solid #00f; padding:10px;"></div>
<div id="i" style="border:1px solid #00f; font-weight:bold; color:red; margin-top:20px; padding:10px;"></div>
<script>
var tm = 0, im = 0;
function tim(){
tm++;
document.getElementById('t').innerHTML = 'setTimeout在执行: '+tm;
} function iim(){
im++;
document.getElementById('i').innerHTML = 'setInterval在执行: '+im;
}
onload = function(){
setTimeout('tim()', 1000); //执行一次 
setInterval('iim()', 1000); // 一直执行
}
</script>

解决方案 »

  1.   

    settimeout()只执行一次
    setInterval 自动重复无限次
    这个你也知道吧
    1。中
    把代码简化一下,可以看成这样
    function timeapper(){ 
    ................
    setTimeout("timeapper()",1000);
    }
    就是自己调用自己,所以每次掉用自己都要setTimeout一次
    所以虽然settimeout()只执行一次,但是在这里可以无限循环
    如果这里换成setInterval 每自己调用自己一次,就会加一个定时器,慢慢就越加越多了,cpu负荷变大也是正常的。你好象只说了代码1  没说代码2吧   赫赫
      

  2.   

    code a<SCRIPT LANGUAGE="JavaScript">
    function a()
    {
    alert("a")
    }
    setTimeout(a,1000)
    </SCRIPT>
    code b<SCRIPT LANGUAGE="JavaScript">
    function a()
    {
    alert("a")
    }
    setInterval(a,1000)
    </SCRIPT>
    code c<SCRIPT LANGUAGE="JavaScript">
    function a()
    {
    alert("a")
    setTimeout(a,1000)//多了句这个以后
    }
    setTimeout(a,1000)
    </SCRIPT>
    code a:setTimeout()的用法 只运行一次
    code b:setInterval()的用法
    code c:效果与code b一样 这个可以解释你代码1还是不断的刷新的原理
      

  3.   

    settimeout()只会执行一次
    setInterval()多次执行
    settimeout()多用于递归调用,即递归调用自己。形成与setInterval()一样的效果。
      

  4.   

    settimeout()多用于旧版本的浏览器,setInterval()多用于新版本的浏览器