未加星标

setTimeout() 和 setInterval()

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二05 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

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

setTimeout 超时调用

超时调用需要使用window对象的 setTimeout() 方法,它接受两个参数:要执行的代码和以毫秒表示的时间(即在执行代码前需要等待多少秒)。第一个参数可以是一个包含JavaScript代码的字符串,也可以是一个函数,但是由于传递字符串可能导致性能损失,因此不建议以字符串作为第一个参数。

下面是重点哦!!!!

第二个参数是一个表示等待多长时间的毫秒数, 但经过该时间后指定的代码不一定会执行 。JavaScript是一个单线程的解释器,因此一定时间内只能执行一段代码。为了控制要执行的代码,就有一个JavaScript任务队列。这些任务会按照将它们添加到队列的顺序执行。 setTimeout() 的第二个参数告诉JavaScript再过多长时间把当前任务添加到队列中 。 如果队列是空的,那么添加的代码会立即执行;如果队列不是空的,那么它就要等前面的代码执行完了后再执行。

调用 setTimeout() 之后,该方法会返回一直数值ID,表示超时调用。这个超时调用ID是计划执行代码的唯一标识符,可以通过它来取消超时调用。要取消尚未执行的超时调用计划,可以调用 clearTimeout() 方法并将相应的超市调用ID作为参数传递给它。如:

// 设置超时调用 var timeoutId = setTimeout(function(){ alert("Hello World!"); },100); // 取消超时调用 clearTimeout(timeoutId);

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

注: 超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,严格模式下是undefined。

setInterval 间歇调用

间歇调用与超时调用类似,只不过它会按照指定的时间间隔重复执行代码,直至间歇调用被取消或者页面被卸载。

小结

在使用超时调用时,没有必要跟踪超时调用ID,因为每次执行代码之后,如果不再设置另一次超时调用,调用就会自行停止。一般认为,使用超时调用来模拟间歇调用的是一种最佳模式。在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束前启动。

使用超时调用则可以完全避免这一点。如下:

var num = 0; var max = 10; function incrementNumber () { num++; if (num < max) { setTimeout(incrementNumber,500); } else { alert("Done"); } } setTimeout(incrementNumber,500);

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

主题: JavaScriptJava
分页:12
转载请注明
本文标题:setTimeout() 和 setInterval()
本站链接:http://www.codesec.net/view/480986.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(26)