The difference between setTimeout & setInterval

本文详细解释了JavaScript中setTimeout和setInterval的区别,并通过实例对比了它们的使用方式及注意事项。

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

The difference between setTimeout & setInterval

setTimeoutsetInterval是两个功能很相似的方法,但实际上他们还是有一些区别的。

          setTimeout——这个方法在执行时,就是在等待特定的一段时间之后,唤起另一个方法。而一旦目的方法被唤醒(被执行),setTimeout就结束了。

          setInverval——这个方法从名字上来看,就可以看出一些端倪。setInverval被调用的话,就会一直存在在内存中,它会维护一些状态信息以便于目的方法的下一次触发,直到这个页面被unloaded或者你调用了clearinterval

 

可以写一个例子来看看这两者的区别:

By using setTimeout:

         function hello()
         {
                   Write(“I’m Greg.”);
                   setTimeout(‘hello()’, 
30000);
         }
         function main()
         {
                   Hello();
         }

By using setInterval

         function hello()
         {
                   Write(“I’m Greg”);
         }

         
function main()
         {
                   setInterval(‘hello()’, 
30000);
         }

因为setTimeout不能维持状态,所以,我们需要“循环嵌套”的调用setTimeout才能实现和setInterval一样的功能。当我们需要调用一个不断运行的函数的时候,应该尽可能的使用setInterval,这样就能避免每次去重新“设定一个定时器”,从而提高程序的效率。

还有一个就是,在使用setTimeoutsetInterval来做某些类似于多线程的动作时,要注意。因为Javascript本身就是单线程的,所以,setTimeoutsetInterval两者也并不会新创建一个线程。当两者调用的函数还在执行时,整个进程都是被占用的。

 
在setTimeout设定定时触发的方法后,如果由于某些原因(条件)需要取消,javascript同时提供了window.clearTimeout().
         var  timer = window.setTimeout(method(),200);

         
if (some condition)
         {
                 window.clearTimeout(timer);

         }

同时,由于window.setTimeout(method,time)方法的参数只有两个,而且不能设定带参数的方法(最多只可一可以设定字符串类型的参数的方法)

这个时候如果被设定的方法有参数的话,就要重写window.settimeOut方法
        var _st = window.setTimeout;
        window.setTimeout 
= function(fRef, mDelay) 
        {
                  
if(typeof fRef == 'function')
                  {
                            
var argu = Array.prototype.slice.call(arguments,2);
                            
var f = (function(){ fRef.apply(null, argu); });
                            
return _st(f, mDelay);
                  }
                  
return _st(fRef,mDelay);
        }

调用方法:
Window.setTimeout(method(),1000,object)

Function method(object)
{
    
//Do some
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值