JavaScript 定时器详情


Posted in Javascript onNovember 11, 2021

1、简单介绍

JavaScript中定时器有两个 setInterval() setTimeout() 分别还有取消定时器的方法。
这都是window的对象,调用时可以省略window。这两个方法并不在 JavaScript 的规范中。

定时器方法相关方法有四种:

 

方法 描述
setInterval 周期性地调用一个函数(function)或者执行一段代码。
clearInterval 取消掉用setInterval设置的重复执行动作。
setTimeout 在指定的延迟时间之后调用一个函数或者执行一个代码片段。
clearTimeout 方法可取消由 setTimeout() 方法设置的 timeout。

注意:setTimeout() 只执行一次setInterval()是每间隔给定的时间周期性执行。

2、setInterval

2.1 描述

setInterval() 方法可以按照制定的周期,来重复调用一个函数或执行一个代码段。周期单位为毫秒。
setInterval() 方法如果没有被 clearInterval() 方法关闭或页面关闭,那么会一直调用下去。
setInterval的参数有多个。
第一种,如果第一个参数为代码段,那么setInterval()方法可以选填。
第二种,如果第一个参数为函数,那么setInterval()方法可以有多个参数。

let timerId = setInterval(func|code, delay, arg1, arg2, ...)

2.2 参数

参数 必/选填 描述
func | code 必填 调用的函数后要执行的函数或代码字符串
delay 必填 执行代码前所需的时间,单位为毫秒,可以不填,默认值是 0
arg1,arg2… 选填 要传入被执行函数(或代码字符串)的参数列表(IE9 以下不支持)

注意:参数func|code 一般传入的都是函数。由于某些历史原因,支持传入代码字符串,但是不建议这样做。

2.3 返回值

返回值timeoutID是一个正整数,表示定时器的编号。这个值可以传递给clearTimeout()来取消该定时器。

2.4 用法

这是一个点击按钮,每隔一秒种,数字加一的示例;

<p id="showNum"></p>
<button onclick="timer()">点我每秒钟数字加一</button>

<script>
  const showNum = document.getElementById("showNum");

  let timerId; // 计时器的ID
  let num = 0;

  function timer() {
    timerId = setInterval(addNum, 1000);
  }

  function addNum() {
    showNum.innerText = `${num++}`;
  }

  // 没有写停止计时器代码
</script>

3、setTimeout

3.1 描述

setTimeout()返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。
setTimeout()允许我们将函数推迟到一段时间间隔之后再执行。

let timerId = setTimeout(func|code, delay, arg1, arg2, ...)

3.2 参数

setTimeout()参数这里和setInterval()的参数是一样的。

参数 必/选填 描述
func | code 必填 调用的函数后要执行的函数或代码字符串
delay 必填 执行代码前所需的时间,单位为毫秒,可以不填,默认值是 0
arg1,arg2… 选填 要传入被执行函数(或代码字符串)的参数列表(IE9 以下不支持)

注意:参数func|code 一般传入的都是函数。由于某些历史原因,支持传入代码字符串,但是不建议这样做。

3.3 用法

setTimeout()用法和 setInterval()是一样的,

不过 setTimeout() 只执行一次不同,setInterval() 是根据指定的时间周期性执行。

<p id="showNum"></p>
<button onclick="timer()">点击后,等待一秒钟数字加一</button>

<script>
  const showNum = document.getElementById("showNum");

  let timerId;
  let num = 0;
  addNum();

  function timer() {
    timerId = setTimeout(addNum, 1000);
  }

  function addNum() {
    showNum.innerText = `${num++}`;
  }

</script>

4、取消timer

clearInterval() 方法可取消由 setInterval() 设置的 timer
clearTimeout() 方法可取消由 setTimeout() 设置的 timer

使用方法很简单,只有一个参数,该参数timeoutID为您要取消定时器的标识符。
该ID由相应的setTimeout()clearTimeout()调用返回.

clearInterval(intervalID);
clearTimeout(timeoutID);

注意:注意的是setTimeout()和setInterval()共用一个编号池,技术上,clearTimeout()和 clearInterval() 可以互换。但是,为了避免混淆,不要混用取消定时函数。

用法很简单:

function timer() {
  timerId = setTimeout(addNum, 1000);
}

clearTimeout(timerId); // 当代码运行到这行的时候,会取消timer所设置的定时器。

5、在控制台使用定时器

在浏览器控制台中也可以使用定时器

console.time(timerName)

创建一个名为name的计时器,并开始计时。

注意: 每一个计时器必须拥有唯一的名字,页面中最多能同时运行10,000个计时器。

console.timeEnd(timerName)

调用console.timeEnd(name)停止计时器并输出所耗时间(毫秒)。

console.time(timerName);
console.timeEnd(timerName);

5.1 用法

for循环99999次要多少时间示例:

console.time(name);

let num;
for (let index = 0; index < 99999; index++) {
  num++;
}

console.timeEnd(name);

到此这篇关于JavaScript 定时器 详情的文章就介绍到这了,更多相关JavaScript 定时器 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
双击滚屏-常用推荐
Nov 29 Javascript
JavaScript 对象成员的可见性说明
Oct 16 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
Jul 13 Javascript
alert和confirm功能介绍
May 21 Javascript
JavaScript 模块的循环加载实现方法
Dec 13 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
Dec 01 Javascript
vue.js将unix时间戳转换为自定义时间格式
Jan 03 Javascript
JavaScript中 DOM操作方法小结
Apr 25 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
教你搭建按需加载的Vue组件库(小结)
Jul 29 Javascript
使用javascript解析二维码的三种方式
Nov 11 #Javascript
实现一个简单得数据响应系统
Nov 11 #Javascript
JavaScript函数柯里化
Nov 07 #Javascript
JS数组去重详情
Nov 07 #Javascript
手写实现JS中的new
Nov 07 #Javascript
用JS写一个发布订阅模式
Nov 07 #Javascript
浅谈JavaScript浅拷贝和深拷贝
You might like
PHP5 安装方法
2006/10/09 PHP
小偷PHP+Html+缓存
2006/12/20 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
javascript读取RSS数据
2007/01/20 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
九州传奇上机题
2014/07/10 面试题
文秘应届生求职信
2014/07/05 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
Python何绘制带有背景色块的折线图
2022/04/23 Python