有如下一段代码: 
<html>
<head>
<script language="javascript">
var str=0;
function Test(){
        if (str==10)
           str=1;
        else 
           str=str 1;
        p.innerHTML=str;
        setInterval('Test();',1000);   //注意此处是setInterval
        clearInterval(Test)
}
</script>
</head>
<body onload=Test()>
<span id="p"></span>
</body>
</html>
在运行的时候,它并不是先后输出的1 2 3 5 .....,而是基本没有次序,运行几秒后在任务管理器中就显示CPU为100%但把上面的setInterval换成setTimeout后就一切正常了,循环输出1-10。这两个函数的区别到底是什么啊?

解决方案 »

  1.   

    [setTimeout]  
    setTimeout(表达式,延时时间)  
    在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次 
    [setInterval]  
    setInterval(表达式,交互时间)  
    则不一样,它从载入后,每隔指定的时间就执行一次表达式   
      

  2.   

    顾名思义一下setInterval('Test();',1000); 
    由于你是反复调用自己所以用setTimeout就可以了,时间到了就有调用Test()
      

  3.   

    楼主比较猛,这个不死才怪呢。当你调用clearInterval(Test)是想把setInterval清除吗?这样是清除不掉的,应该这样:var id = setInterval('Test()',1000);
    clearInterval(id);    // 这里清除的不是函数,而是id不然就算你有10个CPU也顶不住。
      

  4.   

    送你三本手册!DHTML参考手册(setInterval和setTimeout在这里)
    http://download.csdn.net/source/308913样式表中文手册
    http://download.csdn.net/source/304124JScript语言参考
    http://download.csdn.net/source/308916
      

  5.   

    看3楼的说法就对了,在这程序中直接用setTimeout就行了。setInterval一般不会用在函数内部来反复调用自己的,而是在函数外部赋值给一个变量去执行,然后在函数内部判断当满足某条件时,用clearInterval去清除这个变量计时器。
      

  6.   

    4楼不错。
    setTimeout意思是只会执行一次。
    setInterval则会每间隔单位时间都会执行,直到你取消为止。
      

  7.   

    setTimeout意思是只会执行一次,此处你把setTimeout放在方法体内调用,这样的话,等于去做循环调用。
    这样写的效果,类似于在方法体外用setInterval调函数也就是每间隔单位时间都会执行。
      

  8.   

    每隔一秒打开一个新的调用,前面的都不关闭,当然会死机了。
    setTimeout就不同了,在这里如果是setTimeout就只是一个调用,只是循环而已。