很多人认为 setTimeout 是延时多久,那就应该是多久后执行。
其实这个观点是错误的,因为 JS 是单线程执行的,如果前面的代码影响了性能,就会导致 setTimeout 不会按期执行。
采用系统时间补偿法:修正每次时间间隔,前面耽误了时间,那么就缩小当前定时器的间隔时间
如情况1:前一个定时推迟了17ms,为了在100ms的时候执行两次定时器,所以第二次定时器的时间就设置为33ms
Offset=现在的时间(67ms)-执行一个定时器消耗的时间(50ms)=时间差(17ms)
offset = new Date().getTime() - (startTime + count * interval);
Cur=原来的定时器间隔时间(50ms)-时间差(17ms)=33ms(则下次定时器的时间间隔设置为33ms)