setTimeot与setInterval定时器

一、设置超时响应:setTimeout设置延迟响应,设置一个超时对象,只执行一次;setInterval设置一个超时对象,周期=“交互时间”。

二、清除定时器:clearTimeout(),清除已设置的setTimeout;clearInterval,清除已设置的setInterval对象。

设置定时器的以上两种方式在某些情况下可以相互进行转换;但是虽然执行效果相同,两者也会存在一定的差异。

设置定时器,定时器的回调函数并不是相当于在时间到了就执行,而是有一个主js执行进程,这个进程是页面刚加载的时候页面按照加载顺序执行的js代码,此外还有一个需要在进程空闲的时候执行的代码队列,而我们所说的定时器的回调就是相当于在一定时间之后把定时器回调放入到空闲队列中(注意,空闲队列有可能还有其它的代码,比如点击事件,因此定时器回调放入的位置不一定是空闲队列的开始位置!)


以下为一个说明实例:setInterval(loop,3000); function loop(){ alert("Hello world!"); },使用setInterval来进行延迟响应;function loop(){ alert("Hello world!"); setTimeout(loop,3000); }使用setTimeout来进行延迟响应。

上面这两段代码显示的结果会很相似,不过两者的最大区别就是,setTimeout方法不会每隔3秒钟执行一次loop函数,它是在每次调用setTimeout后过3秒钟再去执行loop函数。这意味着如果loop函数的主体部分如果需要1秒钟执行完,那么整个函数就需要4秒钟才执行一次。setInterval却没有被自己所调用的函数所束缚,它只是简单地每隔一定时间就重复执行一次那个函数。

如果要求在每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处理时间,那么最好使用setTimeout。 
接下来再说说setInterval的清除:clearInterval(),clearInterval()函数的作用是清除对setInterval()函数的调用,clearInterval()方法的语法是:clearInterval(intervalid);intervalid是执行setInterval()函数后返回的对象。

原文地址:https://www.cnblogs.com/gehj/p/6706089.html