js定时器setTimeOut() 和 setInterval()


记录一些以后会经常用到的模块,一点一点积累…

一、常用的两种定时器

常用的两种:setTimeOut() 和 setInterval()。interval:间隔

区别:
setTimeOut():延时调用,只执行一次;
setInterval():间隔调用,需要用清除定时器处理。

参数:
setTimeout(code,millisec,lang)
setInterval(code,millisec,lang)

- code:要调用的函数或要执行的代码串。(必需)
- millisec:时间间隔,以毫秒计。(必需)
- lang: 脚本语言 JScript | VBScript | JavaScript (可选,常常不需要用到)

定时器清除方法:
 - clearTimeout(obj)
 - clearInterval(obj)
定时器在调用时,会返回一个整形数字,代表定时器的序号,清除时就是用到这个序号来定位清除定时器。

1、setTimeOut

setTimeOut实例

console.log("开始时间:" + new Date());
        
function test1(){
    console.log("测试1回调时间:" + new Date());
}
// 函数名,不带参数
setTimeout(test1,1000);

// 字符串
// setTimeout('test1()',3000); // 报错了 这样写不行

// 匿名函数
setTimeout(function(){
    console.log("我是匿名函数"+ new Date());
}, 5000)
// 开始时间:Thu Apr 22 2021 15:17:18 GMT+0800 (中国标准时间)
// 我是匿名函数Thu Apr 22 2021 15:17:23 GMT+0800 (中国标准时间)

function test4(obj){
    console.log("测试4:" + obj +";回调时间:" + new Date());
}
setTimeout("test4('obj')",7000)  // 还是报错了 应该不能用字符串来表示

2、setInterval

setInterval实例

因为setInterval()是间隔调用,所以得用到清除定时器,才可以关闭。这里为了能看到每间隔1秒后都会调用,直到遇到了清除定时器clearInterval(),用的是延迟5秒后调用清除定时。

console.log("开始时间:" + new Date());

var demo1 = setInterval(function(){
    console.log("demo1回调时间:" + new Date());
}, 1000)

setTimeout(function(){
    clearInterval(demo1);
    console.log("关闭demo1的时间:" + new Date());
}, 5000)

在这里插入图片描述

二、定时器序号

var demo1 = setInterval(function(){
    console.log("demo1回调时间:" + new Date());
}, 1000)

// 定时器序号
console.log(demo1);

setTimeout(function(){
    clearInterval(demo1);
    console.log("关闭demo1的时间:" + new Date());
}, 5000)

在这里插入图片描述

三、定时器线程理解

先看个例子:

console.log("开始时间:" + new Date());

setTimeout(function(){
    console.log("定时器回调时间:" + new Date());
}, 5000)

for(let i = 0; i < 9000; i++){  // 第一次循环3000,第二次循环9000
    console.log("这是循环");
    if(i==8999){
        console.log("循环结束:" + new Date());
    }
}

console.log("事件队列最后一个:" + new Date());

在这里插入图片描述
相同的代码,只是中间循环的次数不同,第一个返回的定时器时间在事列后5秒,而第二个返回的定时器时间是事列后3秒,且都距离开始时间5秒。

如果中间的循环时间越大,最后定时器回调的时间还会是开始时间的5秒后吗? 把循环换成50000,再来试一下:
在这里插入图片描述
最后发现定时器回调时间已经超过了当初定的5秒,这是为什么呢?

解释

当循环的时间较短,没有超过定时器的延迟5秒,当事列结束后再调用定时器回调函数;

当循环的时间越来越长,但还是没有超过5秒,定时器还能按照规定时间执行;

当循环时间很长,已经超过了定时器回调时间,但是因为事件队列是栈结构,即时到了5秒也不能立即执行定时器回调函数,而是把回调函数放入事件队列栈中,只能等事件栈前面的事件依次执行完后再执行定时器回调函数,所以最后定时器回调函数执行的时间会包括前面事件的执行时间。
在这里插入图片描述

持续更新

这里是定时器的理解与用法,后面若有相关方法将会持续更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值