实际上,setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。
不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。
setInterval("showTime()", 5000);
setTimeout("showTime()", 5000);
这两种方法可能看起来非常像,而且显示的结果也会很相似,不过两者的最大区别就是,setTimeout方法不会每隔5秒钟就执行一次showTime函数,它是在每次调用setTimeout后过5秒钟再去执行showTime函数。这意味着如果showTime函数的主体部分需要2秒钟执行完,那么整个函数则要每7秒钟才执行一次。而setInterval却没有被自己所调用的函数所束缚,它只是简单地每隔一定时间就重复执行一次那个函数。
如果要求在每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处理时间,那么最好使用setTimeout。
现在我们用setTimeout来模拟setInterval,使setInterval调用函数执行完后等待5秒再执行
代码如下:
function Log(txt) { document.getElementById("msg").innerHTML += txt + "<br/>"; } function showTime() { var datatime = new Date(); Log(datatime.toTimeString()); } window.setInterval = function (callback, delay) { var obj = arguments.callee; if (obj.timeout == undefined) { obj.timeout = new Object(); obj.timeout.called = true; } function fn() { if (obj.timeout.called) { callback(); setTimeout(arguments.callee, delay); } } fn(); return obj.timeout; } window.clearInterval = function (fn) { fn.called = false; } result = setInterval(showTime, 1000); function btnClick() { clearInterval(result); }