昼猫笔记 JavaScript -- 异步执行 | 定时器真的定时执行?

 本篇主要内容:异步、定时器引发的思考

预计阅读时间:8分钟

 

了解

我们都知道在js中定时器有两种  setInterval()  、 setTimeout()  
setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,直到  clearInterval()  被调用或窗口被关闭。 
setTimeout() :在指定的毫秒数后调用函数或计算表达式。 
那么问题来了,定时器真的是定时执行的吗? 刚开始我认为定时器肯定是定时执行的啊,要不然怎么会叫做定时器呢,后来我感觉我好像错了,所以今天就来说说这个问题 定时器真的是定时执行的吗


测试

 

复制代码
1 var start = Date.now() 2 console.log('启动定时器前...') 3 setTimeout(function () { 4    console.log('定时器执行了: ', Date.now()-start) 5 }, 100) 6 console.log('启动定时器后...');
复制代码

 

 

 

 

我们会发现定时器执行了101ms, 一般会延迟一丁点(可以接受),说白了就是准确的,如果说300ms之后执行呢?

复制代码
var start = Date.now() console.log('启动定时器前...') setTimeout(function () {    console.log('定时器执行了: ', Date.now()-start) }, 100) console.log('启动定时器后...'); for (var i = 0; i < 1000000000; i++) {  }
复制代码

 

如果像上边这种情况,本来是200ms,但是现在变成了1941ms,那还合适吗? 
也就是说我们的定时器真的能保证定时吗? 
答案是不能,也可能延迟执行,是在原有设定的时间上又有延迟,加入本来是200ms, 那么现在是1941ms,所以说定时器并不能真正保证定时执行

注意:定时器的回调函数是在主线程执行,无论是非回调函数还是回调函数都是在主线程执行

 


关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信