js 中setTimeout和setInterval的使用

摘要:
事实上,setTimeout和setInterval具有相同的语法。如果使用setInterval,则对应的代码如下:File:settitimeout_seinterval2.jssetInterval;FunctionshowTime(){vartoday=newDate();alert;}这两个方法看起来非常相似,显示的结果也非常相似。然而,这两种方法之间的最大区别是setTimeout方法不会每五秒执行showTime函数。它在每次调用setTimeout后5秒后执行showTime函数。但是,有一些方法可以终止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。

js 中setTimeout和setInterval的使用第5张

函数指针的使用

两个计时函数中的第一个参数是一段代码的字符串,其实该参数也可以是一个函数指针,不过Mac下的IE 5对此不支持。

如果用函数指针作为setTimeout和setInterval函数的第二个参数,那么它们就可以去执行一个在别处定义的函数了:

setTimeout(showTime, 500);

function showTime()

{

    var today = new Date();

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

}

另外,匿名函数还可以声明为内联函数:

setTimeout(function(){var today = new Date();

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

 讨 论

如果对计时函数不加以处理,那么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); }
复制代码

 

免责声明:文章转载自《js 中setTimeout和setInterval的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Window_Open详解BOM onload onunload onbeforeload的区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

图片上传插件用法,JS语法【三】

注意点: 作为文件域(<input type="file">)必须要有name属性,如果没有name属性,上传之后服务器是获取不到图片的。如:正确的写法是<input type="file" name="file1" /> dataType参数一定要大写。如:dataType: 'HTML' 一.html <body>...

js中return、return true、return false的区别

一、返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果二、返回控制,无函数结果,语法为:return;在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个a元素,页面会跳转到该元素href属性指定的页. Return False 就相当于终止符,Retu...

JS 8*8点阵显示字母

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &...

原生js增加,移除类名

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style>.box{width:200px;height:200px;back...

2-7 js基础-ajax封装

functionjson2url(json) { var arr =[]; for (var name injson) { arr.push(name+'='+encodeURIComponent(json[name])); } return arr.join('&'); } func...

js转义问题

js转义问题有很多场景,比如常见的根据某个字符串删除或者修改以及将某字符串传递至某个页面。今天以一个简单的示例代码为例: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title...