WebAPI: setTimeout如何实现

  • setTimeout

    • 定时器,用来指定某个函数在多少毫秒之后执行,返回一个整数,表示定时器的编号。
  • 浏览器实现过程:

    1. 创建延迟回调任务 DelayTask
    2. 添加到延迟队列 delayed_incoming_queue
    3. ProcessDelayTask函数,专门处理延迟执行任务,根据任务的创建时间和延迟时间计算出到期的任务,以此循环执行到期的任务。
    4. clearTimeout,根据Id清除取消定时器任务
  • 使用setTimeout的一些注意事项:

    1. 当消息队列的任务执行时间过久,会影响到定时器任务的执行
    2. 如果setTimeout存在嵌套,则系统会设置最短时间间隔时间4s
    3. 未激活的页面,setTimeout的最短间隔时间是1000毫秒
    4. 执行时间有最大值:主流浏览器都是以32bit存储延迟值,最多存放的数字是2147483647毫秒,大约24.8天。超过这个时间会溢出,那么相当于延时值被设置为0了,会导致定时器被立即执行。
    5. 使用setTimeout设置的回调函数中this指向全局环境

      1. 匿名函数
      2. bind修改this指向
此文章为4月Day12学习笔记,内容来源于极客时间《浏览器原理》,学习使我快乐,每天进步一点点💪💪

豪猪
4 声望4 粉丝

undefined