es6如何清除定时器

发布时间:2022-04-14 18:39:09 作者:iii
来源:亿速云 阅读:763

今天小编给大家分享一下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 当前是第三个定时器

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

怎么清除定时器

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

清除定时器有两个函数:

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);
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);
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()

好处:

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

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

推荐阅读:
  1. javascript中如何设置定时器和清除定时器
  2. 详解小程序退出页面时清除定时器

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

es6

上一篇:mysql如何修改一列的值

下一篇:linux如何查看有哪些服务

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》