位置: IT常识 - 正文

定时器 setTimeout、setInterval详解(定时器计数器实验报告)

编辑:rootadmin
定时器 setTimeout、setInterval详解

推荐整理分享定时器 setTimeout、setInterval详解(定时器计数器实验报告),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:定时器设置时间步骤,定时器怎么调,定时器怎么调,定时器设置时间步骤,定时器开关怎么接线,定时器开关怎么设置时间,定时器开关怎么接线,定时器怎么设置时间视频教程,内容如对您有帮助,希望把文章链接给更多的朋友!

定时器:按我个人理解来说就是固定某个时间后,时间到了,就提醒我时间到了。

程序中的定时器:相当于倒计时,也相当于计时器。作用是在设定的某个时间后,执行特定的方法。

我们先来了解一下setTimeout定时器,他的特点就是只能用一次,也称为一次性定时器。

setTimeout( func, time, argument1, argument2, .... );语法解析: 1、func:固定时间后执行的方法 2、time:设置固定的时间-按毫秒计算 3、argument:传入方法的参数案例:setTimeout(function(name,gender){console.log(name + " is " + gender);}, 1000, "Tom", "boy");简写:setTimeout((name,gender) => {console.log(name + " is " + gender);}, 1000, "Tom", "boy");案例解析:开启了一个一次性定时器,1秒后执行我给定的函数。

接着看看 setInterval定时器,他的特点就是可以重复执行给定的函数。

setInterval ( func, time, argument1, argument2, .... );语法解析: 同 setTimeout参数意义一致案例:setInterval(function(name,gender){console.log(name + " is " + gender);}, 1000, "Tom", "boy");简写:setInterval((name,gender) => {console.log(name + " is " + gender);}, 1000, "Tom", "boy");案例解析:开启了一个重复定时器,每隔1秒执行我给定的函数。

接下来就开始圈重点了: 定时器概念了解了,也会造定时器了,那这个定时器什么时候调用呢,因为我们的 javaScript代码是从上到下,逐行执行,那到了定时器这行我们的进程会不会等定时器执行完了再执行定时器后面的代码呢?答案是不会等!

遇到定时器,会将定时器加入到任务队列中(宏任务),等所有代码执行完了,程序会看一下队列中还有什么没有完成的 ,如果有没完成的,就执行一下。

这样说可能有点抽象,看下案例好了。

console.log("1 ===>");setTimeout(function(name,gender){ console.log(name + " is " + gender);}, 1000, "Tom", "boy");console.log("2 ===>");执行结果:> "1 ===>"> "2 ===>"> "Tom is boy"

注意:任务队列里的执行顺序是按先来后到的

接下来再深入理解一下,我们先思考一个问题,一次性定时器和重复性定时器区别在哪,不可能就只是调一次和调多次这么简单吧。

提醒:接下来的内容比较重要,有点抽象但需要理解透彻

案例:假设我们需要每隔一秒控制台输出一句话。

结合我们本文的学习,给出思路:

1、一次性定时器的函数里再调定时器,形成循环。

定时器 setTimeout、setInterval详解(定时器计数器实验报告)

2、开启一个重复性定时器

编写实现代码:

思路1:setTimeout(function run(name,gender){ console.log(" hello"); setTimeout(run,1000);}, 1000);思路2:setInterval(()=>{console.log("hello")},1000);

看到这大家可能会不禁感叹,就这?就这?这哪复杂了,逗我呢。 那不妨思考一下,第二个一次性定时器啥时候开始执行呢?第三个呢?第n个呢?程序运行的第n秒?

那我稍微改造一下刚刚的案例好了

setTimeout(function run(name,gender){ console.log("1 ===>"); setTimeout(run,1000); console.log("2 ===>");}, 1000);

接着可以思考一下输出的结果是什么。

然后再来思考重复性定时器,第二次函数调用是啥时候执行呢?第三个呢?第n个呢?

再稍微改造一下好了

let start = Date.now(); // 程序一运行的时间let times = []; // 用来记录运行时间的数组let sTime = setInterval(()=>{ times.push(Date.now() - start); // 记录下执行时间 if (start + 5000 < Date.now()) { console.log(times); }},1000);

好了,留些时间思考一下…

思考好了吗,好了的话一起揭晓一下答案吧。

第一种情况:> "1 ===>"> "2 ===>"> "1 ===>"> "2 ===>"第二种情况:> Array [1001, 2003, 3003, 4000, 5000, 6000]分析:情况1:思考这个问题就可 -> 输出 "1 ===>" 之后我开启了另一个定时器,此时是不是应该再输出"1 ===>"?然后就进入了定时器循环,结果一直只有"1 ===>"?结合我们的结果,可以发现下一个定时器是什么时候开的?没错,执行完第一个定时器函数内的代码后再执行的。情况2:根据时间的间隔很容易知道时间就是1秒上下几毫秒,所以下一个定时器是第一个定时器时间结束后立即开启的。这就是他们两个比较靠底层的区别。总结的话就留给大家自己总结吧,毕竟一千个读者就会有一千个读者(哈哈,开个玩笑,说句可能像话的话😄)。

现在我们已经大致了解了定时器以及触发时间,那么会造定时器了不会取消就有点说不过去了,下面一起看看怎么取消定时器。

let timerId1 = setTimeout(...);clearTimeout(timerId1); // 取消一次性定时器,timeId1 是唯一且必传参数let timerId2 = setInterval(...);clearInterval(timerId2)。 // 取消重复定时器,timeId2 是唯一且必传参数

注意:定时器开启了一定要关闭,要做到有始有终,不然会一直消耗内存,到时候就就很容易程序崩溃。

还有一个留最后讲的,因为比较细节。

下面我们来看个案例

let start = Date.now();let times = [];setTimeout(function run() { times.push(Date.now() - start); // 保存前一个调用的延时 if (start + 50 < Date.now()) console.log(times); // 100 毫秒之后,显示延时信息 else setTimeout(run); // 否则重新调度});结果:> Array [1, 2, 4, 5, 9, 13, 18, 22, 27, 32, 36, 42, 46, 50, 55]let start = Date.now(); // 程序一运行的时间let times = []; // 用来记录运行时间的数组let sTime = setInterval(()=>{ times.push(Date.now() - start); // 记录下执行时间 if (start + 50 < Date.now()) { console.log(times); clearInterval(sTime); // 清除定时器 }});结果:> Array [1, 2, 3, 4, 8, 13, 16, 20, 25, 28, 32, 36, 40, 44, 48, 53]

感兴趣的同学可以分别思考一下这两组数组的规律,然后再往下看

好了,这就不卖关子了,直接把结论告诉大家吧

浏览器会将 setTimeout 或 setInterval 的五层或更多层嵌套调用(调用五次之后)的最小延时限制在 4ms。这是历史遗留问题。

最后,大家拷贝案例执行的时候,运行的结果很大概率和我这个结果不一样,影响的因素有浏览器版本、类型等等问题。不过这也不影响结论是正确的 ^ _ ^ , 好了,文章到这就结束了,有问题大家可以在评论区留言哈,拜拜👋

本文链接地址:https://www.jiuchutong.com/zhishi/295279.html 转载请保留说明!

上一篇:【uni-app教程】四、UniAPP 路由配置及页面跳转(uni-app入门到实战)

下一篇:ntp-keygen命令 生成NTP主机密钥(ntpdate 命令)

  • 魅族18s是2k屏吗(魅族18 18s 18x)

    魅族18s是2k屏吗(魅族18 18s 18x)

  • 拼多多微信支付无法跳转(拼多多微信支付扣款顺序)

    拼多多微信支付无法跳转(拼多多微信支付扣款顺序)

  • 天猫超市换购商品无法购买(天猫超市换购商品已加入购物车没有了)

    天猫超市换购商品无法购买(天猫超市换购商品已加入购物车没有了)

  • 代码28是什么驱动(win10代码28是什么驱动)

    代码28是什么驱动(win10代码28是什么驱动)

  • reno4是什么处理器(oppo reno4什么处理器?)

    reno4是什么处理器(oppo reno4什么处理器?)

  • soul注销后会怎样(soul注销后还有瞬间吗)

    soul注销后会怎样(soul注销后还有瞬间吗)

  • 微信置顶的句子怎么设置(微信置顶的句子别人能看到吗)

    微信置顶的句子怎么设置(微信置顶的句子别人能看到吗)

  • word中添加下划线(word添加下划线的快捷键)

    word中添加下划线(word添加下划线的快捷键)

  • 卖家收到退货后迟迟不处理退款(卖家收到退货后迟迟不处理退款怎么投诉)

    卖家收到退货后迟迟不处理退款(卖家收到退货后迟迟不处理退款怎么投诉)

  • 电脑显示屏缩小怎么搞全屏(电脑显示屏缩小了两边黑屏)

    电脑显示屏缩小怎么搞全屏(电脑显示屏缩小了两边黑屏)

  • 为什么手机充电会充一下断一下(为什么手机充电充不进去)

    为什么手机充电会充一下断一下(为什么手机充电充不进去)

  • 微店收款二维码怎么申请(微店收款二维码在哪)

    微店收款二维码怎么申请(微店收款二维码在哪)

  • vivo怎么将软件移到sd(vivo怎么将软件图标换成自己喜欢的图片)

    vivo怎么将软件移到sd(vivo怎么将软件图标换成自己喜欢的图片)

  • oppo手机怎么自动清灰(oppo手机怎么自定义来电铃声)

    oppo手机怎么自动清灰(oppo手机怎么自定义来电铃声)

  • oppoa9x抬头灯怎么设置(oppo手机怎么关闭一抬头就亮呢)

    oppoa9x抬头灯怎么设置(oppo手机怎么关闭一抬头就亮呢)

  • soul怎么看对方是否在线(soul怎么看对方在不在线)

    soul怎么看对方是否在线(soul怎么看对方在不在线)

  • vue怎么添加流动字幕(vue动态添加input框)

    vue怎么添加流动字幕(vue动态添加input框)

  • 荣耀20pro怎么退出程序(荣耀20pro怎么退出talkback)

    荣耀20pro怎么退出程序(荣耀20pro怎么退出talkback)

  • icloud怎么清除空间(如何清除icloud的内存)

    icloud怎么清除空间(如何清除icloud的内存)

  • 8p能不能无线充电(8p可以用无线充电器吗?)

    8p能不能无线充电(8p可以用无线充电器吗?)

  • 苹果7有个黑圈屏幕失灵(苹果7手机有个黑色圆圈)

    苹果7有个黑圈屏幕失灵(苹果7手机有个黑色圆圈)

  • 苹果 macOS Big Sur 11.4正式版今日发布 更新内容汇总(苹果客服人工24小时)

    苹果 macOS Big Sur 11.4正式版今日发布 更新内容汇总(苹果客服人工24小时)

  • 23年 车辆检测+车距检测+行人检测+车辆识别+车距预测(附yolo v5最新版源码)(2021年车辆检测)

    23年 车辆检测+车距检测+行人检测+车辆识别+车距预测(附yolo v5最新版源码)(2021年车辆检测)

  • rwho命令  查看系统用户(命令查看系统信息)

    rwho命令 查看系统用户(命令查看系统信息)

  • php文件怎么解压(php压缩文件怎么打开)

    php文件怎么解压(php压缩文件怎么打开)

  • 小规模纳税人刚成立公司如何记账
  • 公司开电费发票怎么入账
  • 购进灭火器材怎么入账
  • 交强险可以打折扣吗
  • 员工团体意外保险怎么报销
  • 刷卡收手续费吗
  • 增值税纳税申报表模板
  • 发票普票一个月能开多少
  • 每个月固定发工资
  • 银行承兑汇票贴现率多少
  • 社保补贴收入要交税吗?
  • 超额库存现金
  • 租赁汽车油费可以抵扣吗
  • 总公司名义取得的进项发票可以在分公司抵扣吗?
  • 免征政府性基金预缴税款
  • 物业公司代收水费合理吗
  • 对公账户提取备用金可以每天提现嘛
  • 待处理流动资产损失属于什么科目
  • 发票修复是怎么回事
  • 个人劳务费增值税税率是多少2023
  • 怎么处理有问题的货物
  • 终于找到修改mac的方法了!
  • 怎么解决百度打不开页面
  • 删除文件时错误是怎么回事
  • 网页老是自己跳出来
  • 税金及附加包括所得税费用吗
  • 收到水电费的增值税普通发票怎么做账
  • 销售合作分成会计分录
  • word要打印保存在哪个类型
  • 录制权限怎么打开
  • php投票代码
  • 洛阿雷城堡,西班牙韦斯卡 (© Sebastian Wasek/Alamy)
  • 增值税待认证进项税额
  • 一般纳税人企业所得税如何计算
  • thinkphp项目怎么部署
  • 无形资产的处置方式
  • vmware虚拟机安装在移动硬盘
  • nodejs如何使用
  • 前端不使用明文密码方案
  • js框架jquery
  • 计提折旧会计分录例题
  • 公司没有车加油票怎么做账
  • 预提工资的会计处理
  • 试用产品的账务处理分录
  • 股权司法冻结及司法划转解释
  • 个人收到承兑汇票
  • 银行汇票的特点和用途
  • 财政直接支付的概念
  • 在建工程借款利息计入哪里
  • 附加税多计提了怎么做分录
  • 会计做账的原始凭证有哪些
  • 实收资本未到位
  • 一般纳税人开劳务费的税率是多少
  • 未支付房租怎么做账
  • 农产品计算抵扣税率 最新
  • 行政事业单位固定资产入账标准最新规定
  • 个体工商户如何缴纳社保
  • 企业应该设置几个安全管理人员
  • 酒店财务帐务处理方案
  • 如何在mysql显示当前用户
  • win10系统迅雷
  • 安卓设备连接苹果设备
  • 安装fedora进入不到安装界面
  • freebsd怎么用
  • centos7修改文件内容
  • win7系统安装谷歌浏览器
  • 双系统怎么屏蔽另一个磁盘
  • cocos2d原理
  • android入门视频教程
  • 怎么把perl删除干净
  • Unity3D游戏开发基础
  • linuxshell命令行
  • 举例详解民法典第994条
  • python语言文件
  • js easyui
  • 东莞税收突破2000亿
  • 生产企业出口退税退的是哪部分的税
  • 国有土地使用权出让和转让条例
  • 城镇土地使用税会计分录
  • 国税局信息中心事业编待遇
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设