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 相关文章推荐
用js得到网页中所有的div的id
Oct 19 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
Oct 20 Javascript
Javascript跨域请求的4种解决方式
Mar 17 Javascript
jquery获取焦点和失去焦点事件代码
Apr 21 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
Oct 24 Javascript
Vue 监听列表item渲染事件方法
Sep 06 Javascript
微信小程序制作表格的方法
Feb 14 Javascript
JS删除String里某个字符的方法
Jan 06 Javascript
JavaScript数组常用的增删改查与其他属性详解
Oct 13 Javascript
vue 封装面包屑组件教程
Nov 16 Javascript
Node.js文本文件BOM头的去除方法
Nov 22 Javascript
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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
php实现RSA加密类实例
2015/03/26 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
Python常用模块介绍
2014/11/21 Python
Python中的生成器和yield详细介绍
2015/01/09 Python
django使用html模板减少代码代码解析
2017/12/12 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
如何基于Python实现数字类型转换
2020/02/07 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
销售员求职个人的自我评价
2014/02/19 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电