java中settimeout,详解setTimeout/setInterval(浏览器环境)

setTimeout / setInterval是浏览器和node.js都有的方法。

setImmediate / process.nextTick()是node.js里的方法。

window.setImmediate部分浏览器存在,不是标准,可能也不会成为标准。

简介

setTimeout:延迟一段时间之后执行。

let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)

func|code 想要执行的函数或代码字符串。

delay 执行前的延时,单位毫秒,默认为0;

arg1,arg2… 要传入被执行函数(或代码字符串)的参数列表(IE9 以下不支持)

取消调度:clearTimeout(timerId)

setInterval: 间隔一定时间重复执行。

let timerId = setInterval(func|code, [delay], [arg1], [arg2], ...)

参数同setTimeout。

取消调度:clearInterval(timerId)

计时规则

计时使用独立的定时器线程,计时完毕,将回调函数推入事件队列中,等待主线程执行。

setInterval严格按照间隔时间计时,不管回调执行多长时间,只要时间到了,就把下一个任务推入事件队列等待JS引擎空闲后执行。因此如果执行时间超出间隔时间,后面的回调会等待这一次执行完(且在JS引擎空闲时)立即执行。

嵌套的setTimeout只有在当前回调执行完,才开始安排下一次的计时。

(setTimeout/setInterval执行规则相关知识:Event Loop事件循环机制)

HTML5标准规定,浏览器环境中setTimeout嵌套/setInterval循环从第五次开始,间隔时间至少为4毫秒。

node.js则没有这个限制。

请注意,所有的调度方法都不能保证确切的延时。浏览器内的计时器可能由于许多原因而变慢:例如CPU 过载、浏览器标签页处于后台模式、笔记本电脑用的是电池供电(使用电池供电会以降低性能为代价提升续航)。所有这些因素,可能会将定时器的最小计时器分辨率(最小延迟)增加到 300ms 甚至 1000ms,具体以浏览器及其设置为准。

垃圾回收和闭包

当一个函数传入setInterval/setTimeout时,将为其创建一个内部引用,并保存在调度器中。因此,即使这个函数没有其他引用,也能防止被垃圾回收器回收。

对于setInterval,传入的函数也是一直存在于内存中,直到clearInterval被调用。

这种引用机制带来了副作用:如果函数引用了外部变量(形成闭包),那么只要这个函数还存在,外部变量也会随之存在。它们可能比函数本身占用更多的内存。因此,当我们不再需要调度函数时,最好使用clearTimeout和clearInterval取消它。

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[详解setTimeout/setInterval(浏览器环境)]http://www.zyiz.net/tech/detail-120067.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值