JavaScript setInterval()与setTimeout()计时器


Posted in Javascript onDecember 27, 2019

JavaScript是单线程语言,但是它可以通过设置超时值和间歇时间值来指定代码在特定的时刻执行。超时值是指在指定时间之后执行代码,间歇时间值是指每隔指定的时间就执行一次代码。

超时调用

超时调用使用window对象的setTimeout()方法,它接受两个参数:要执行的代码和以毫秒表示的时间(代码执行前的等待时间)。其中,第一个参数可以是一个字符串(和eval()中使用的字符串一样),也可以是一个函数。

JavaScript setInterval()与setTimeout()计时器

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

调用setTimeout()之后,该方法会返回一个数值ID,表示超时调用。这个超时调用ID是计划执行代码的唯一标识符,可以通过它来取消超时调用。取消超时调用使用方法clearTimeout();

JavaScript setInterval()与setTimeout()计时器

间歇调用

间歇调用与超时调用类似,只不过它会按照指定的时间间隔重复执行代码,直至间歇调用被取消或页面被卸载。设置间歇调用的方法是setInterval(),它接收的参数与setTimeout()相同。取消间歇调用的重要性远高于超时调用。

JavaScript setInterval()与setTimeout()计时器

但是通常情况下,很少真正使用间歇调用,因为后一个间歇调用可能在前一个间歇调用结束之前调用。因此,我们通常会使用超时调用来模拟间歇调用

JavaScript setInterval()与setTimeout()计时器

下面看两个小demo:

1、获得当前日期并让它显示在文本框内,点击“stop”按钮后事件静止。(间歇调用) 

 HTML代码:

<input type="text" size="50" id="clock" />
<input type="button" value="Stop" id="btn" />

JavaScript代码:

function clock(){
  var time = new Date();
  document.getElementById("clock").value = time;  
  var btn =document.getElementById("btn");
  btn.onclick = function(){
    clearInterval(t); 
  }
}
var t = setInterval(clock,1000);

2、使用setTimeou()实现计数统计效果,并在文本框中显示数值。

HTML代码:

<input type="text" id="count" />

JavaScript代码:

var num = 0;
function startCount(){
  document.getElementById("count").value = num;
  num += 1;
  setTimeout(startCount,1000);  //setTimeout是超时调用,使用递归模拟间歇调用
}  
setTimeout(startCount,1000);  //1s后执行

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
Oct 20 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
Apr 11 Javascript
深入学习JavaScript对象
Oct 13 Javascript
AngularJS包括详解及示例代码
Aug 17 Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 Javascript
JS中with的替代方法与String中的正则方法详解
Dec 23 Javascript
livereload工具实现前端可视化开发【推荐】
Dec 23 Javascript
在一般处理程序(ashx)中弹出js提示语
Aug 16 Javascript
webpack DllPlugin xxx is not defined解决办法
Dec 13 Javascript
基于Cesium绘制抛物弧线
Nov 18 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
vue中watch和computed为什么能监听到数据的改变以及不同之处
Dec 27 #Javascript
React中使用UMEditor的方法示例
Dec 27 #Javascript
node.js express捕获全局异常的三种方法实例分析
Dec 27 #Javascript
JavaScript中变量提升机制示例详解
Dec 27 #Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
Dec 26 #Javascript
Vue使用虚拟dom进行渲染view的方法
Dec 26 #Javascript
node.js Promise对象的使用方法实例分析
Dec 26 #Javascript
You might like
支持oicq头像的留言簿(二)
2006/10/09 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
nodejs教程之入门
2014/11/21 NodeJs
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
python版大富翁源代码分享
2018/11/19 Python
python模块导入的细节详解
2018/12/10 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
Python3进制之间的转换代码实例
2019/08/24 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
数据库基础的一些面试题
2012/02/25 面试题
MySQL面试题
2014/01/12 面试题
英文简历自荐信范文
2013/12/11 职场文书
个人自我评价分享
2013/12/20 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
授权委托书(完整版)
2014/09/10 职场文书
个人授权委托书模板
2014/09/14 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android