当前位置: 首页 > article >正文

请写出js中的两种定时器,区别是什么?怎么清除定时器?

在 JavaScript 中,有两种主要的定时器:setTimeoutsetInterval。它们的区别和清除方式如下:

1. setTimeout

  • 功能:在指定的延迟时间后执行一次指定的函数。
  • 语法
    const timeoutId = setTimeout(callback, delay, arg1, arg2, ...);
    
    • callback:要执行的函数。
    • delay:延迟的时间(以毫秒为单位)。
    • arg1, arg2, ...:可选参数,将传递给 callback 函数。
  • 示例:
    function greet() {
      console.log("Hello, world!");
    }
    
    // 延迟 2000 毫秒后执行 greet 函数
    const timeoutId = setTimeout(greet, 2000);
    
    // 可以清除定时器
    clearTimeout(timeoutId); // 如果在2000毫秒内调用,会取消执行
    

    2. setInterval

    用法
  • 功能:每隔指定的时间间隔执行一次指定的函数。
  • 语法
    const intervalId = setInterval(callback, interval, arg1, arg2, ...);
    
     

callback:要执行的函数。

interval:执行间隔的时间(以毫秒为单位)。

arg1, arg2, ...:可选参数,将传递给 callback 函数。

  • 示例:
    function tick() {
      console.log("Tick");
    }
    
    // 每 1000 毫秒执行一次 tick 函数
    const intervalId = setInterval(tick, 1000);
    
    // 可以清除定时器
    clearInterval(intervalId); // 如果需要停止执行
    

    区别

    特性setTimeoutsetInterval
    执行次数只执行一次持续执行,直到被清除
    使用场景延迟一次的操作定期重复的操作
    取消定时器使用 clearTimeout使用 clearInterval
    延迟与间隔仅设置一次延迟持续设定时间间隔

    清除定时器

  • 清除 setTimeout: 使用 clearTimeout 函数可以取消一个尚未执行的 setTimeout 调用。

    const timeoutId = setTimeout(() => {
      console.log("This will not run.");
    }, 5000);
    
    clearTimeout(timeoutId); // 取消定时器
    


    清除 setInterval: 使用 clearInterval 函数可以停止一个正在运行的 setInterval 调用。

    const intervalId = setInterval(() => {
      console.log("This will run every second.");
    }, 1000);
    
    // 停止执行
    clearInterval(intervalId);
    

注意事项

  • setInterval 不会考虑上一个执行是否完成,因此如果某个任务耗时过长,可能会导致多个实例同时运行。
  • 可以使用 setTimeout 在每次执行后重新设置 setTimeout 来避免这种情况,确保每次只在上一次任务完成后再执行下一次。

结束语

通过合理使用 setTimeoutsetInterval,可以实现多种定时操作的需求。在使用这些定时器时,注意清除它们,以避免不必要的资源消耗。

 


http://www.kler.cn/news/364679.html

相关文章:

  • Windows驱动开发(三)—— 驱动和应用层通信的几种方式
  • 跨平台 OTT 项目使用 Google Analytics 替代 KPI log
  • 什么是虚拟线程?Java 中虚拟线程的介绍与案例演示
  • SQL实战测试
  • 1024程序员节的来源
  • 给已经写好的裸机程序移植freeRTOS操作系统
  • 外向交货单行项目修改自定义字段 BAPI_OUTB_DELIVERY_CHANGE 增强
  • ab命令深入解析:ApacheBench性能测试工具
  • FFMPEG录屏(18)--- 枚举Windows下的窗口列表并获取进程图标、标题、缩略图等
  • 光控资本:退市整理期啥意思,退市整理期交易规则?
  • 13 django管理系统 - 注册与登录 - 中间件控制访问
  • Redis项目中应用
  • 从 Hadoop 迁移到数据 Lakehouse 的架构师指南
  • 【日志】递归求斐波那契数列
  • 无人机之RTK定位定向技术篇
  • 自动化桌面通知:使用Plyer库实现工作提醒
  • Java根据word 模板,生成自定义内容的word 文件
  • Kmeans聚类算法简述
  • 计算机毕业设计Hadoop+Hive+Spark+Flink广告推荐系统 广告预测 广告数据分析可视化 广告爬虫 大数据毕业设计 深度学习 机器学习
  • 异地多活架构
  • 列出机器学习方向的创新点
  • Mac 安装 TIDB 并 启动集群
  • Java 如何确保 JS 不被缓存
  • mac切换java版本
  • 【OceanBase探会】云与 AI 赋能一体化数据库的创新之旅
  • 恋爱脑讲编程:Rust 的所有权概念