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 相关文章推荐
csdn 博客中实现运行代码功能实现
Aug 29 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
Dec 25 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
Nov 24 Javascript
分享20个提升网站界面体验的jQuery插件
Dec 15 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
Mar 09 Javascript
使用递归遍历对象获得value值的实现方法
Jun 14 Javascript
深入浅析knockout源码分析之订阅
Jul 12 Javascript
jQuery实现对象转为url参数的方法
Jan 11 Javascript
微信小程序授权登录及解密unionId出错的方法
Sep 26 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
Jul 28 Javascript
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
使用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
建立文件交换功能的脚本(三)
2006/10/09 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
php字符串操作常见问题小结
2016/10/11 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
ext实现完整的登录代码
2008/08/08 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
2014年手术室工作总结
2014/11/26 职场文书
内乡县衙导游词
2015/02/05 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
趣味运动会赞词
2015/07/22 职场文书
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs