
setInterval 和 settimeout的区别
setinterval 
1.会造成某些间隔会被跳过
2.多个定时器之间的执行代码事假间隔比预期的小
而且 当定时器代码添加到任务队列里面没有被执行的
时候 不能在添加新的定时器代码
在定时器代码执行的时候 随便添加
看图说明问题
当在5ms创建了一个间隔为200ms的定时器
 btn.onclick=funcion(){
   
   setInterval(function(){
	
     //代码执行时间为300ms多一点
},200);
   //整个click时间代码执行时间为300ms
};
 当点击按钮的时候 到5ms 的时候 就会执行seInterval
 然后到了205ms 就把定时器代码添加到任务队列
 当click事件处理程序执行完毕之后
 立刻就会执行205ms处的定时器代码
 然后在定时器代码执行过程中 
 会在405ms处添加一个新的定时器代码
 然后在605ms处添加新的定时器代码
 这里不会添加成功
 因为405ms处的定时器代码没有开始执行
 所以跳过
 当205ms处添加的定时器代码执行完毕以后
 立刻执行405ms处的定时器代码在
 然后在805ms处添加定时期
依次类推
 setTimeout(function(){
   
 
 },1000);
 就是等待1000ms 如果任务队列没有代码执行了  是空的
 就立刻执行  否则等待执行完毕
 所以用setTimeout链式调用
setTimeout(function(){
      // 代码
setTimeout(arguments.caller,delay);
},delay);
 这样就没事了
 每次添加新的定时器都是在代码执行完毕以后
 至少等待delay
原文:https://www.cnblogs.com/liveoutfun/p/9648289.html