setTimeout和setInterval的使用

这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。不过两者各有各的应用场景。

方 法

实际上,setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。

不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。

虽然表面上看来setTimeout只能应用在on-off方式的动作上,不过可以通过创建一个函数循环重复调用setTimeout,以实现重复的操作:

File: settimeout_setinterval.js

showTime();

function showTime()

{

var today = new Date();

alert("The time is: " + today.toString());

setTimeout("showTime()", 5000);

}

一旦调用了这个函数,那么就会每隔5秒钟就显示一次时间。如果使用setInterval,则相应的代码如下所示:

File: settimeout_setinterval2.js

setInterval("showTime()", 5000);

function showTime()

{

var today = new Date();

alert("The time is: " + today.toString());

}

这两种方法可能看起来非常像,而且显示的结果也会很相似,不过两者的最大区别就是,setTimeout方法不会每隔5秒钟就执行一次showTime函数,它是在每次调用setTimeout后过5秒钟再去执行showTime函数。这意味着如果showTime函数的主体部分需要2秒钟执行完,那么整个函数则要每7秒钟才执行一次。而setInterval却没有被自己所调用的函数所束缚,它只是简单地每隔一定时间就重复执行一次那个函数。

如果要求在每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处理时间,那么最好使用setTimeout。
讨 论

如果对计时函数不加以处理,那么setInterval将会持续执行相同的代码,一直到浏览器窗口关闭,或者用户转到了另外一个页面为止。不过还是有办法可以终止setTimeout和setInterval函数的执行。

当setInterval调用执行完毕时,它将返回一个timer ID,将来便可以利用该值对计时器进行访问,如果将该ID传递给clearInterval,便可以终止那段被调用的过程代码的执行了,具体实现如下:

File: settimeout_setinterval3.js (excerpt)

var intervalProcess = setInterval("alert('GOAL!')", 3000);

var stopGoalLink = document.getElementById("stopGoalLink");

attachEventListener(stopGoalLink, "click", stopGoal, false);

function stopGoal()

{

clearInterval(intervalProcess);

}

只要点击了stopGoalLink,不管是什么时候点击,intervalProcess都会被取消掉,以后都不会再继续反复执行intervalProcess。如果在超时时间段内就取消setTimeout,那么这种终止效果也可以在setTimeout身上实现,具体实现如下:

File: settimeout_setinterval4.js (excerpt)

var timeoutProcess = setTimeout("alert('GOAL!')", 3000);

var stopGoalLink = document.getElementById("stopGoalLink");

attachEventListener(stopGoalLink, "click", stopGoal, false);

function stopGoal()

{

clearTimeout(timeoutProcess);

}

最新文章

  1. window.onload与$(document).ready()的区别
  2. php中ajax调用出错的问题
  3. 【我的产品观】开发wangEditor一年总结
  4. 重新想象 Windows 8.1 Store Apps (86) - 系统 UI 的新特性: Theme, 窗口宽度大小可变, ApplicationView, DisplayInformation
  5. (转)对各种初始化函数的理解:OnInitDialog、InitInstance、InitApplication函数的理解
  6. zoj 1097 普吕弗序列
  7. C#:控制WinForm界面的显示
  8. 关于tomcat8在windows2008下高并发下问题的解决方案
  9. JAVA 创建类,使用类
  10. Java调用Telnet示例
  11. jQuery效果:隐藏、显示、切换、滑动、淡入淡出、动画
  12. 怎么样学好C++
  13. JavaScript问题——在浏览器中每一个元素都有一个offsetParent属性,这个属性是什么?
  14. Zookeeper 集群搭建--单机伪分布式集群
  15. socketsever
  16. koa2使用阿里云oss的nodejs sdk实现上传图片
  17. 《网络对抗》拓展:注入shellcode
  18. C#中的方法,方法的重载,以及几个关键字
  19. Qt5获取网卡/IP等信息
  20. ES6的新特性(7)——函数的扩展

热门文章

  1. '<<' '|' '>>' 等位运算符 课本祥解
  2. Npm vs Yarn 之备忘大全
  3. .22-浅析webpack源码之事件流compilation总览
  4. 局域网内一台电脑的ip地址自己会变,怎样让它不变
  5. Insert Sort Singly List
  6. CCF系列之相反数(201403-1)
  7. 修改Weblogic jdk版本
  8. Effective Java 第三版——28. 列表优于数组
  9. Traits技法
  10. JDK自带的日志Logging