深入学习 JavaScript 定时器

在JavaScript中经常会用到两个常用定时器,setTimeoutsetInterval,前者是一次性的,在设定时间后执行相应任务,后者是设置一个时间间隔重复执行相同的任务。他们俩也对应有相应的clear方法,用来取消操作。当调用set操作时,会返回一个定时器id,保存这个id可对其进行取消操作。

执行时间问题

虽然给相应的定时器设置相应的执行时间,但是严格上来说,是无法保证执行时间的准确性的,这跟JavaScript的运行机理有关,因为它是单线程的,所有任务就像火车一样,是串联着一个接一个的执行,定时器也不例外。

不同

setTimeout是在前一个回调执行完后,延时指定时间后再执行,而setInterval是不管前一个回调有没有执行完,都根据指定时间执行相应任务,所以这样就会有一个问题,当一个回调占用很多的时间,setInterval就有可能一次性执行很多缓存起来的任务。