The difference between setTimeout & setInterval
setTimeout和setInterval是两个功能很相似的方法,但实际上他们还是有一些区别的。
setTimeout——这个方法在执行时,就是在等待特定的一段时间之后,唤起另一个方法。而一旦目的方法被唤醒(被执行),setTimeout就结束了。
setInverval——这个方法从名字上来看,就可以看出一些端倪。setInverval被调用的话,就会一直存在在内存中,它会维护一些状态信息以便于目的方法的下一次触发,直到这个页面被unloaded或者你调用了clearinterval。
可以写一个例子来看看这两者的区别:
By using setTimeout:
{
Write(“I’m Greg.”);
setTimeout(‘hello()’, 30000);
}
function main()
{
Hello();
}
By using setInterval
{
Write(“I’m Greg”);
}
function main()
{
setInterval(‘hello()’, 30000);
}
因为setTimeout不能维持状态,所以,我们需要“循环嵌套”的调用setTimeout才能实现和setInterval一样的功能。当我们需要调用一个不断运行的函数的时候,应该尽可能的使用setInterval,这样就能避免每次去重新“设定一个定时器”,从而提高程序的效率。
还有一个就是,在使用setTimeout和setInterval来做某些类似于多线程的动作时,要注意。因为Javascript本身就是单线程的,所以,setTimeout和setInterval两者也并不会新创建一个线程。当两者调用的函数还在执行时,整个进程都是被占用的。
在setTimeout设定定时触发的方法后,如果由于某些原因(条件)需要取消,javascript同时提供了window.clearTimeout().
if (some condition)
{
window.clearTimeout(timer);
}
同时,由于window.setTimeout(method,time)方法的参数只有两个,而且不能设定带参数的方法(最多只可一可以设定字符串类型的参数的方法)
这个时候如果被设定的方法有参数的话,就要重写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);
}
调用方法:
Function method(object)
{
//Do some
}