js setInterval()和setTimeout()的用法

该文章已生成可运行项目,

一、基础用法

1. setTimeout()

​功能​​:延迟指定时间后执行一次函数或代码。
​语法​​:

const timerId = setTimeout(callback, delay, arg1, arg2...);
  • ​参数​​:
    • callback:要执行的函数或代码字符串(不推荐字符串形式
    • delay:延迟时间(毫秒),默认最小值为 4ms
    • arg1, arg2...:传递给回调函数的额外参数(可选)

​示例​​:

function greet(name) { console.log(`Hello, ${name}!`); } setTimeout(greet, 2000, "Alice"); // 2秒后输出 "Hello, Alice!"
2. setInterval()

​功能​​:每隔指定时间重复执行函数或代码,直到被清除。
​语法​​:

const intervalId = setInterval(callback, interval, arg1, arg2...);
  • ​参数​​:与 setTimeout 类似,但 interval 表示重复间隔时间。

​示例​​:

let counter = 0; const intervalId = setInterval(() => { console.log(`Count: ${counter++}`); if (counter >= 5) clearInterval(intervalId); // 停止循环 }, 1000);

 

清除定时器​
  • ​必要性​​:未清除的定时器可能导致内存泄漏或意外执行。

clearInterval() 方法的语法是:

clearInterval(intervalID);

        这里,intervalID 是 setInterval() 方法的返回值。

    二、核心区别

    特性setTimeoutsetInterval
    ​执行次数​一次无限次重复,直到清除

    ​误差累积​无累积误差(单次执行)可能因回调执行时间过长导致累积误差

    ​清除方法​clearTimeout(timerId)clearInterval(intervalId)
    ​参数传递​支持额外参数(ES6+)支持额外参数(ES6+)

     示例

    async function monDone(deviceId, hour) {
      reset()
      loading.value = true
      let params = {
        'date': '',
        'deviceId': '',
        'hour': '',
      };
      params.date = proxy.moment(date.value).format("YYYY-MM-DD")
      params.deviceId = deviceId
      params.hour = hour
    
      let res = await getMonitorByDeviceMinute(params)
      monOneData.value = res.data
      switch (monOneData.value.minutes.length) {
        case 30:
          pageNum.value = 15
          break;
        case 60:
          pageNum.value = 20;
          break;
        case 12:
          pageNum.value = 12;
          break;
        default:
          pageNum.value = 10
      }
      loading.value = false
      visible.value = hour
      deviceItemId.value = deviceId
      
      // 清除已有定时器
      if (monInterval) {
        clearInterval(monInterval)
      }
      
      // 设置新的定时器,每分钟执行一次
      monInterval = setInterval(() => {
        getMonitorByDeviceMinute(params).then(res => {
          reset()
          monOneData.value = res.data
        
        })
      }, 60000)
    }

    本文章已经生成可运行项目
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值