JavaScript是单线程语言,但它允许通过设置定时器,也就是设置超时值和间歇时间来调度代码在特定的时刻执行。前者是在指定的时间过后执行代码,而后者则是每隔指定的时间就执行一次代码。

超时调用需要使用window对象的setTimeout()方法,他接受两个参数:要执行的代码和以毫秒表示的时间。其中,第一个参数可以是一个包含JavaScript代码的字符串,也可以是一个函数。例如,下面对stTimeout()的两次调用都会在一秒钟后显示一个警告框:

//不建议传递字符串!

setTimeout("alert('Hello world!')", 1000);

//推荐的调用方式

setTimeout(function () {

alert("Hello world!");

}, 1000);

虽然这两种调用方式都没有问题,但由于传递字符串可能导致性能损失,因此不建议以字符串做为第一个参数。调用setTimeout()之后,该方法会返回一个数值ID,表示超时调用。这个超时调用ID是计划执行代码的唯一标识符,可以通过它来取消超时调用。要取消尚未执行的超时调用计划,可以调用clearTimeOut()方法并将相应的超时调用ID作为参数传递给它,如下所示:

//设置超时调用

var timeoutId = setTimeout(function () {

alert("Hello world!");

}, 1000);

//注意:把它取消

clearTimeout(timeoutId);

只要是在指定的时间尚未过去之前调用clearTimeout(),就可以完全取消超时调用。前面的代码在设置超时调用之后马上有调用了clearTimeout(),结果就跟什么也没发生一样。

间歇调用与超时调用类似,只不过它会按照指定的时间间隔重复执行代码,直至间歇调用被取消或者页面被卸载。设置间歇调用的方法是setInterval(),它接受的参数与setTimeout()相同:要执行的代码(字符串或者函数)和每次执行之前需要等待的毫秒数。下面来看一个例子:

//不建议传递字符串!

setInterval("alert('Hello world')", 10000);

//推荐的调用方式

setInterval(function () {

alert("Hello world!");

}, 1000);

调用setInterval()方法也会返回一个间歇调用ID,该ID可用于在将来在某个时刻取消间歇调用。要取消尚未执行的间歇调用,可以使用clerarInterval()方法并传入相应的间歇调用ID。取消间歇调用的重要性要远远高于取消超时调用,因为在不加干涉的情况下,间歇调用将会一直执行到页面卸载。下面是一个常见的使用间歇调用的例子:

var num = 0;

var max = 10;

var intervalId = null;

function incrementNumber() {

num++;

//如果执行次数达到了max设定的值,则取消后续尚未执行的调用

if (num == max) {

clearInterval(intervalId);

alert("完成");

}

}

intervalId = setInterval(incrementNumber, 500);

在这个例子中,变量num每半秒递增一次,当递增到最大值是就会取消先前设定的间歇调用。这个模式也可以使用超时调用来实现,如下所示:

var num = 0;

var max = 10;

function incrementNumber() {

num++;

//如果执行次数未达到max设定的值,则设置另一次超时调用

if (num < max) {

setTimeout(incrementNumber, 500);

} else {

alert("完成");

}

}

setTimeout(incrementNumber, 500);

可见,在使用超时调用时,没必要跟踪超时调用ID,因为每次执行代码之后,如果不再设置另一次超时调用,调用就会自行停止。一般认为,使用超时调用来模拟间歇调用的是一种最佳的模式。在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动。而像前面实例中那样使用超时调用,则完全可以避免这一点。所以最好不要使用间歇调用。

定时器 setTimeout()超时调用和 setInterval()间歇调用的更多相关文章

  1. JavaScript BOM-11-BOM的核心-window对象; window对象的控制,弹出窗口方法; 超时调用; 间歇调用; location对象常用属性; 位置操作--location.reaplace,location.reload(); BOM中的history对象; Screen对象及其常用属性; Navigator对象;

    JavaScript BOM 学习目标 1.掌握什么是BOM 2.掌握BOM的核心-window对象 3.掌握window对象的控制.弹出窗口方法 什么是bom BOM(browser object ...

  2. 【学习笔记】深入理解超时调用(setTimeout)和间歇调用(setInterval)

    超时调用(setTimeout):在指定的毫秒数后调用函数或计算表达式. setTimeout(func, 1000); // func执行的函数,1000毫秒 间歇调用(setInterval):按 ...

  3. 定时器(setTimeout/setInterval)调用带参函数失效解决方法

    也许你曾碰到过这样的问题,不管是setInterval()还是setTimeout(),当code参数里放一个带参函数时,定时器都会失效,看下面这个例子: function test(str){ al ...

  4. 关于JavaScript中的setTimeout()链式调用和setInterval()探索

    http://www.cnblogs.com/Wenwang/archive/2012/01/06/2314283.html http://www.cnblogs.com/yangjunhua/arc ...

  5. Javascript间歇调用和超时调用

    间歇调用:每隔指定的时间就执行一次代码 超时调用:在指定的时间过后执行代码  HTML Code  12345678910111213141516171819   <!DOCTYPE html& ...

  6. JavaScript定时调用函数(SetInterval与setTimeout)

    setTimeout和setInterval的语法同样.它们都有两个參数.一个是将要运行的代码字符串.另一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将运行那段代码. 只是这两个函数还是有差别的 ...

  7. web 开发之js---js 中的定时器setTimeout(function,time),setinterval(function,time)

    ####10秒自动跳转 <div class="jf_register"> <h2>您好,欢迎光临<fmt:message key="b2c ...

  8. Javascript&Html-延迟调用和间歇调用

    Javascript&Html-延迟调用和间歇调用 Javascript 是一种单线程语言,所有的javascript任务都会放到一个任务列表中,这些javascript任务会按照插入到列表中 ...

  9. js课程 3-9 js内置对象定时器和超时器怎么使用

    js课程 3-9 js内置对象定时器和超时器怎么使用 一.总结 一句话总结:定时器:    1.定义    sobj=setInterval(func,1000);        2.清除    cl ...

随机推荐

  1. Java学习笔记之——多态、抽象

    1. 多态 多态:同一种事物调用同一个方法有不同的表现行为.(同一类型操作,作用于某一类对象,可以有不同的解释,产生不同的执行结果) 应用场景;当你定义一个功能性的方法可以使用多态的概念 前提:子类继 ...

  2. Hibernate入门(十一)多对多案例

    Hibernate多对多案例 1.用户对角色 DROP TABLE IF EXISTS emp_role; DROP TABLE IF EXISTS employee; DROP TABLE IF E ...

  3. Java 文件流操作.

    一.概念 在Java中,文件的输入和输出是通过流(Stream)来实现的.一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是 Internet 上的某个 URL.对 ...

  4. Mybatis框架可视化(1)

    Mybatis整体架构视图: 接 口 层 SqlSession (定义了Mybatis暴露给应用程序调用的API) 核 心 处 理 层 配置解析 (加载核心配置.映射配置. mapper接口注解信息, ...

  5. SQL查询,关联查询的区别 (LEFT JOIN 、LEFT OUTER JOIN、INNER JOIN)

    ), f2 ) ) ), f2 ) ) ------------------------------------------------ ','a1') ','a2') ','a3') ','a4') ...

  6. 如何创建.gitignore文件,忽略git不必要提交的文件

    touch .gitignore 在项目目录里输入以上名利后,会自动生成一个文件 .gitignore,可在文件里写入忽略的文件名,例如 node_modules coverage .idea npm ...

  7. Java中array、List、Set互相转换

    数组转List String[] staffs = new String[]{"A", "B", "C"}; List staffsList ...

  8. jQuery效果之jQuery Color animation 色彩动画扩展

    jQuery 的动画方法(animate)支持各种属性的过渡,但是默认并不支持色彩的过渡,该插件正是来补足这一点! PS: 该插件支持 RGBA 颜色的过渡,但是请注意,IE8以下的版本不支持 RGB ...

  9. Android图片采样缩放

    为什么要对Android中的图片进行采样缩放呢? 是为了更加高效的加载Bitmap.假设通过imageView来显示图片,很多时候ImageView并没有图片的原始尺寸那么大,这时候把整张图片加载进来 ...

  10. RMAN-06172 Troubleshooting

      今天在RMAN还原测试过程中,遇到了"RMAN-06172: no autobackup found or specified handle is not a valid copy or ...