setInterval定时器(先触发一次再延时)

本文探讨了在使用setInterval时,如何确保函数先立即执行一次,然后再按设定的时间间隔重复执行。通过示例代码展示了正确的实现方式,包括使用函数本身作为参数以及避免使用arguments.callee的替代写法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近经常遇到这样的问题:需要间隔多少秒获取一次数据。实际中,往往采用setInterval来实现,但是当参数传递不当时,会出现先延迟了一段时间后再执行获取的数据的函数。如:

    var data1=0;
    function count1(){
      console.log("count1:",data1++);
    }
    setInterval(count1,1000);

此时可以观察控制台,发现打印第一次会有延迟。如:
图1

查看setInterval官方文档不难发现:

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);
Parameters

func

A function to be executed every delay milliseconds.

code

An optional syntax allows you to include a string instead of a function, which is compiled and executed every delay milliseconds. This syntax is not recommended for the same reasons that make using eval() a security risk.

因此,应该先执行以下原函数,再返回该函数给setInterval周期执行。此时可以如下实现:

    var data2=0;
    var count2= function(){
      console.log("count2:",data2++);
      return count2;//若不返回时,此函数只会执行一次
    }
    setInterval(count2(),1000);

这里也可以采用arguments.callee等方式指代当前函数。如:
图2

不过也可以这样写:

   var data3=0;
   (function count3(){
       console.log("count3:",data3++);
       setTimeout(count3,1000);
   })();

此情况同样适用于setTimeout。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值