WebAPI: setTimeout如何实现
setTimeout
- 定时器,用来指定某个函数在多少毫秒之后执行,返回一个整数,表示定时器的编号。
浏览器实现过程:
- 创建延迟回调任务 DelayTask
- 添加到延迟队列 delayed_incoming_queue
- ProcessDelayTask函数,专门处理延迟执行任务,根据任务的创建时间和延迟时间计算出到期的任务,以此循环执行到期的任务。
- clearTimeout,根据Id清除取消定时器任务
使用setTimeout的一些注意事项:
- 当消息队列的任务执行时间过久,会影响到定时器任务的执行
- 如果setTimeout存在嵌套,则系统会设置最短时间间隔时间4s
- 未激活的页面,setTimeout的最短间隔时间是1000毫秒
- 执行时间有最大值:主流浏览器都是以32bit存储延迟值,最多存放的数字是2147483647毫秒,大约24.8天。超过这个时间会溢出,那么相当于延时值被设置为0了,会导致定时器被立即执行。
使用setTimeout设置的回调函数中this指向全局环境
- 匿名函数
- bind修改this指向
此文章为4月Day12学习笔记,内容来源于极客时间《浏览器原理》,学习使我快乐,每天进步一点点💪💪
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。