iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >es6如何清除定时器
  • 172
分享到

es6如何清除定时器

2024-04-02 19:04:59 172人浏览 八月长安
摘要

今天小编给大家分享一下es6如何清除定时器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

今天小编给大家分享一下es6如何清除定时器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

两种方法:1、用clearTimeout()清除setTimeout定时器,语法“clearTimeout(定时器返回值)”;2、clearInterval()清除setInterval定时器,语法“clearInterval(返回值)”。

教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。

JS的两种定时器

window.setTimeout([function],[interval])

设置一个定时器,并且设定了一个等待的时间,当到达时间后,执行对应的方法,当方法执行完成定时器停止。

window.setInterval([function],[interval])

设置一个定时器,并且设定了一个等待的时间,当到达时间后,执行对应的方法。

当方法执行完成,定时器并没有停止,以后每隔这么长的时间都会重新的执行对应的方法,直到我们手动清除定时器为止。

注意:setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。

定时器返回值

js中的定时器是有返回值的,返回值是一个数字,代表当前是第几个定时器。

var timer1=window.setTimeout(function(){},1000);  //timer1->1 当前是第一个定时器
var timer2=window.setTimeout(function(){},1000);  //timer2->2` 当前是第二个定时器
var timer3=window.setTimeout(function(){},1000);   //timer3->3 当前是第三个定时器

需要注意的是,定时器即使清除了,其返回值也不会清除,之后设置的定时器的返回值也会在其返回值的基础上继续向后排。

怎么清除定时器

若不及时清理定时器,可能会导致内存溢出的风险。所以当我们在使用定时器的时候,就需要考虑在合适的时间清除。

清除定时器有两个函数:

  • setTimeout的销毁函数为clearTimeout

  • setInterval的销毁函数为clearInterval

setInterval对象或setTimeout对象,这两种定时器对象只会随着窗口对象的销毁才从栈空间回收。无法通过更改变量的指针指向null的方式通知垃圾回收机自动回收。如果打算在窗口对象关闭之前销毁窗口对象的栈内存中的setInterval对象只能通过clearInterval销毁它

clearTimeout(id_of_settimeout)

定义:阻止/取消 setTimeout() 方法设置的定时执行函数。

参数:id_of_settimeout是调用 setTimeout() 函数时所返回的ID值,使用该返回标识符作为参数,可以取消该 setTimeout() 所设定的定时执行操作。

注意: 要使用 clearTimeout(id_of_setinterval) 方法, 在创建执行定时操作时要使用全局变量:

var myVar = setTimeout(function(){ alert("Hello"); }, 3000);
clearTimeout(myVar);
  • 是否需要及时清理setTimeOut

function testTimeout () {
	console.log('1111')
	console.log(setTimeout(testTimeout, 3000));
}

上面代码在递归调用testTimeout,然而setTimeout会一直生成setTimeout对象;虽然会被GC回收但时间不确定,这样做比较危险,可能会导致内存溢出。

所以我们应该在每次 setTimeout 之前调用 clearTimeout,防止不断创建setTimeout对象而未被GC回收。

var timeHandle = null;
function testTimeout () {
    if (timeHandle) {
    	// 调用之前,先清理,防止一直生成对象
    	// ps. setInterval 定时器也应该按这种模式处理
    	clearTimeout(timeHandle);
        timeHandle = null;
    }
	console.log('1111');
	console.log(timeHandle = setTimeout(testTimeout, 3000));
}

clearInterval(id_of_setinterval)

定义: 可取消/停止由 setInterval() 函数设定的定时执行操作。

参数:id_of_setinterval是调用 setInterval() 函数时所返回的 ID 值,只有使用该返回标识符作为参数,才可以取消该 setInterval() 所设定的定时执行操作。

注意: 要使用 clearInterval() 方法, 在创建执行定时操作时要使用全局变量:

var myVar = setInterval(function(){ myTimer() }, 1000);
clearInterval(myVar);
  • 是否需要及时清理setInterval

function testInterval () {
	console.log('1111')
	console.log(setInterval(testInterval, 3000));
}

上面代码在递归调用testInterval,然而setInterval会一直生成setInterval对象;虽然会被GC回收但时间不确定,这样做比较危险,可能会导致内存溢出。

所以我们应该在每次 setInterval 之前调用 clearInterval,防止不断创建setInterval对象而未被GC回收。

var timeHandle = null;
function testInterval () {
    if (timeHandle) {
    	// 调用之前,先清理,防止一直生成对象
    	clearInterval(timeHandle);
        timeHandle = null;
    }
	console.log('1111');
	console.log(timeHandle = setInterval(testInterval, 3000));
}

扩展知识:使用setTimeout模拟setInterval行为

通常情况下:递归的方式使用setTimeOut(),效果相当于使用setInterval()

好处:

  • 简化代码

  • 保证异步队列的函数调用顺序的精准度,setInterval的缺陷会导致数据量大的时候,异步队列的函数调用出现执行顺序的错乱。比如这个函数还没执行完又开始执行下一个,递归则不会,递归是当前函数执行完才在栈空间递归创建函数的下一个实体并调用。

//实现的方法挺简单的 ,如下代码
//参数: 毫秒  需要执行的方法
function console1() {
    console.log(111);
    if(timer){
        clearTimeout(timer);
    }
    timer = setTimeout(function(){
        console1();
    }, 3000);
}
console1()

以上就是“es6如何清除定时器”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网node.js频道。

--结束END--

本文标题: es6如何清除定时器

本文链接: https://www.lsjlt.com/news/97306.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • es6如何清除定时器
    今天小编给大家分享一下es6如何清除定时器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 ...
    99+
    2024-04-02
  • javascript如何清除所有定时器
    小编给大家分享一下javascript如何清除所有定时器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • Vue如何优雅的清除定时器
    目录前言 优化 衍生问题:beforeDestroy 没有触发? 前言 清除定时器,相信有相当一部分人是这么写的: export default { data() { ...
    99+
    2024-04-02
  • 如何解决AngualrJs清除定时器遇到的坑
    这篇文章给大家分享的是有关如何解决AngualrJs清除定时器遇到的坑的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。angualrJs清除定时器爬坑之路:发现一个奇怪问题,放在自...
    99+
    2024-04-02
  • javascript定时器清除的方法
    这篇文章主要介绍了javascript定时器清除的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript的特点1.JavaScript主要用来向HTML页面添...
    99+
    2023-06-14
  • es6数组如何清除所有元素
    这篇文章主要介绍“es6数组如何清除所有元素”,在日常操作中,相信很多人在es6数组如何清除所有元素问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6数组如何清除所有元素”...
    99+
    2024-04-02
  • JavaScript清除定时器怎么使用
    这篇文章主要介绍“JavaScript清除定时器怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript清除定时器怎么使用”文章能帮助大家解决问题...
    99+
    2024-04-02
  • vue如何设置定时器和清理定时器
    目录设置定时器和清理定时器1.在data中声明要设置的定时器名称2.在mounted中创建定时器定时器的使用全解1.vue使用定时器2代码实现设置定时器和清理定时器 使用钩子函数对定...
    99+
    2024-04-02
  • Vue怎么优雅的清除定时器
    这篇文章主要介绍“Vue怎么优雅的清除定时器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue怎么优雅的清除定时器”文章能帮助大家解决问题。前言清除定时器,相信有...
    99+
    2024-04-02
  • JS定时器清除的方法是什么
    JS定时器清除的方法有两种:1. 使用clearTimeout()函数清除setTimeout()创建的定时器。传入setTimeo...
    99+
    2023-10-08
    JS
  • vue中如何清除路由事件beforeRouteLeave及组件内定时器
    小编给大家分享一下vue中如何清除路由事件beforeRouteLeave及组件内定时器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一...
    99+
    2024-04-02
  • es6数组如何删除指定元素
    这篇文章给大家分享的是有关es6数组如何删除指定元素的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 es6数组删除指定元素的方法:1、使用“arr.s...
    99+
    2024-04-02
  • es6数组如何去除特定的数
    本篇内容介绍了“es6数组如何去除特定的数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • angular2组件中定时刷新并清除定时器的示例分析
    这篇文章主要为大家展示了“angular2组件中定时刷新并清除定时器的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“angular2组件中定时刷新并清除...
    99+
    2024-04-02
  • vue中清除定时器的方法实例详解
    目录一、问题二、问题出现的原因三、问题解决思路四、实现的源代码五、总结一、问题 1、在vue中使用setTimeout定时器的时候,可能会遇到关不掉的情况,会存在明明已经在befor...
    99+
    2023-02-07
    vue清除定时器方法 设置定时器和清除定时器 vue 定时
  • MYSQL中怎么定时清除备份数据
    这篇文章给大家介绍MYSQL中怎么定时清除备份数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。mysql配置由于定时任务这个选项在mysql的默认配置是关闭的,所以保险起见,我们先查...
    99+
    2024-04-02
  • 如何清除或清空 StringBuilder
    要清除或清空 StringBuilder 的内容,可以使用以下两种方法:1. 使用 setLength(0) 方法将 StringB...
    99+
    2023-09-17
    StringBuilder
  • cookie如何清除
    今天小编给大家分享一下cookie如何清除的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。J...
    99+
    2024-04-02
  • es6如何删除子串
    这篇文章主要介绍了es6如何删除子串的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇es6如何删除子串文章都会有所收获,下面我们一起来看看吧。 删除子...
    99+
    2024-04-02
  • oracle如何清除临时表空间数据
    要清除Oracle临时表空间中的数据,可以使用以下步骤: 首先,确定要清除数据的临时表空间名称。可以通过查询v$tempfile...
    99+
    2024-04-09
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作